PHP等比裁剪图像

在PHP中裁剪的某个部分以进行文字识别,试图提高证件的识别的效果。 因为整张证件的识别,噪音数据太多。很多证件不止打印不规则不工整会压到线,有的可能上下行会严重错开,导致字段名和值无法定位。 另外解决了噪音数据的问题后,还需要解决另一个头疼的问题:打印的文字中,8和B,L和1 ,5和S,区别真的太小了了

<?php
function getEndPointPercentForDengjizhengLeft($x_percent_begin=0.2,$y_percent_begin=0.6){
    return [$x_percent_begin + 0.3,$y_percent_begin + 0.2];
}
/**
 * 根据百分比裁剪一张图片
 * $src_path          图片原路径
 * $save_path         裁剪图片的保存路径
 * $x_percent_begin   裁剪左上角坐标的横向(从左至右)位置百分比,使用小数表示
 * $y_percent_begin   裁剪左上角坐标的竖向(从上至下)位置百分比,使用小数表示
 * $x_percent_end     裁剪右下角坐标的横向(从左至右)位置百分比,使用小数表示
 * $y_percent_end     裁剪右下角坐标的竖向(从上至下)位置百分比,使用小数表示
 */
function cutByPercent($src_path,$save_path,$x_percent_begin=0.2,$y_percent_begin=0.6,$x_percent_end=0.6,$y_percent_end=0.7) {
    // 得知图片宽高
    list($pic_width, $pic_height, $type, $attr) = getimagesize($src_path);
    // 裁剪区域左上角的坐标
    $x = $x_percent_begin * $pic_width;
    $y = $y_percent_begin * $pic_height;
    echo '<br />裁剪左上角坐标:';
    var_dump($x);
    var_dump($y);
    echo '<br />图片宽高:';
    var_dump($pic_width);
    var_dump($pic_height);
    // echo '<br />相减:';
    // var_dump($x_percent_end - $x_percent_begin);
    // echo '<br />abs 相减:';
    // var_dump(abs($x_percent_end - $x_percent_begin));
    // 裁剪的区域宽高(新图片的宽高)  取正整数
    $width = abs($x_percent_end - $x_percent_begin) * $pic_width;
    $height = abs($y_percent_end - $y_percent_begin) * $pic_height;
    echo '<br />裁剪宽高:';
    var_dump($width);
    var_dump($height);
    //最终保存成图片的宽和高,和原图像要等比例,否则会变形
    $final_width = round($width);
    $final_height = round($height);
    // $final_height = round($final_width * $height / $width);
    echo '<br />最终宽高:';
    var_dump($final_width);
    var_dump($final_height);
    //创建源图像的实例
    $src_img=imagecreatefromstring(file_get_contents($src_path));
    //创建空白图像的实例(使用真彩色)
    $new_img=imagecreatetruecolor($width,$height);
    //将裁剪区域复制到新图片上
    imagecopyresampled($new_img, $src_img, 0, 0, $x, $y, $final_width, $final_height, $width, $height);
    // //输出图片
    // header('Content-Type: image/jpeg');//设置输出内容类型格式
    imagejpeg($new_img,$save_path);//将新图片保存为图像文件
    //清空图像资源
    imagedestroy($src_img);
    imagedestroy($new_img);
}


function testDengjizhengLeft($filename='1'){
    $old_filename=isset($_REQUEST['f']) ? $_REQUEST['f'] : '1';
    $new_filename=date('YmdHis').'.'.$old_filename;
    $src_path='assets/test.photos/'.$old_filename.'.jpg';//需要裁剪图像的路径
    $save_path='assets/cut.photos/'.$new_filename.'.jpg';//裁剪后新图象的路径
    $x_percent_begin = 0.55;
    $y_percent_begin = 0.6;
    list($x_percent_end,$y_percent_end) = getEndPointPercentForDengjizhengLeft($x_percent_begin,$y_percent_begin);
    echo '<br />左上角坐标百分比:';
    var_dump($x_percent_begin);
    var_dump($y_percent_begin);
    echo '<br />右下角坐标百分比:';
    var_dump($x_percent_end);
    var_dump($y_percent_end);
    cutByPercent($src_path,$save_path,$x_percent_begin,$y_percent_begin,$x_percent_end,$y_percent_end);
    echo '<br />';
    echo '<div style="float:left"><a href="/'.$save_path.'" target="_blank">新图片<br /><img src="/'.$save_path.'"></a></div>';
    echo '<div style="float:left;width:30%"><a href="/'.$src_path.'" target="_blank">原图片<br /><img style="width:100%" src="/'.$src_path.'"></a></div>';
}
testDengjizhengLeft();
die();