在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();