Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Imagemagick动态调整图像大小_Php_Imagemagick_Image Manipulation_Image Resizing - Fatal编程技术网

Php Imagemagick动态调整图像大小

Php Imagemagick动态调整图像大小,php,imagemagick,image-manipulation,image-resizing,Php,Imagemagick,Image Manipulation,Image Resizing,我已经创建了一个应用程序,用户可以在这里上传图像并选择要裁剪的区域。之后,应调整图像的大小,并使用选定的坐标进行裁剪 问题是,这些图像是事后打印的,因此质量应尽可能接近原始图像(没有瑕疵或可见模糊) 无论如何,调整大小会导致质量下降,并且在调整大小后使用unsharpmask()会使质量提高很多,但每个图像的效果仍然不同 哦,有时颜色甚至与原作不匹配:( 我知道这个函数的参数取决于图像的大小和饱和度,但是有没有办法计算出最佳参数 以下是我目前掌握的情况: $origPath = "ThePat

我已经创建了一个应用程序,用户可以在这里上传图像并选择要裁剪的区域。之后,应调整图像的大小,并使用选定的坐标进行裁剪

问题是,这些图像是事后打印的,因此质量应尽可能接近原始图像(没有瑕疵或可见模糊)

无论如何,调整大小会导致质量下降,并且在调整大小后使用unsharpmask()会使质量提高很多,但每个图像的效果仍然不同

哦,有时颜色甚至与原作不匹配:(

我知道这个函数的参数取决于图像的大小和饱和度,但是有没有办法计算出最佳参数

以下是我目前掌握的情况:

 $origPath = "ThePathToTheFileOnTheServer.jpg";

 move_uploaded_file( $_FILES['imagefile']['tmp_name'],$origPath);

 $img = new Imagick();

 $file_handle_for_viewing_image = fopen($origPath, 'a+');

 $img->readImageFile($file_handle_for_viewing_image);

 fclose($file_handle_for_viewing_image);

 $img->setImageFormat('jpg');
 $img->setImageCompression(Imagick::COMPRESSION_JPEG);
 $img->setImageCompressionQuality(100); 
 $img->resizeImage ( 0, $targ_h,  Imagick::FILTER_LANCZOS, 1);
 $img->unsharpMaskImage(0 , 0.5 , 1 , 0.05); 
 $img->cropImage($targ_w, $targ_h, $xPos, 0);                    

 $newimg = new Imagick();
 $newimg->newImage($targ_w,$targ_h,new ImagickPixel('white'));
 $newimg->setImageFormat('jpg');
 $newimg->setImageCompression(Imagick::COMPRESSION_JPEG);
 $newimg->setImageCompressionQuality(100); 
 $newimg->compositeImage($img,Imagick::COMPOSITE_OVER,0,0);
 $newimg->writeImage("TheNewImage.jpg");
它做了它应该做的,但是我可以计算$img->unshapmaskimage(0,0.5,1,0.05)的参数来修复当前图像吗

谢谢你的帮助

下面是一个例子:

原件:

调整大小后:


您可以尝试在
实验室
颜色空间中调整大小,然后再转换回sRGB。在命令行中,这将是

convert input.jpg -colorspace Lab -resize ... -colorspace sRGB result.jpg

您可以尝试在
Lab
颜色空间中调整大小,然后再转换回sRGB

convert input.jpg -colorspace Lab -resize ... -colorspace sRGB result.jpg