Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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中的图像大小调整_Php_Image_Imagemagick_Gd_Image Resizing - Fatal编程技术网

PHP中的图像大小调整

PHP中的图像大小调整,php,image,imagemagick,gd,image-resizing,Php,Image,Imagemagick,Gd,Image Resizing,当我在做一些图像处理时,我发现PHP中的GD和Imagick并没有将图像调整为颜色像素相同的级别,这在大多数情况下是不需要的。 现在,为了以防万一,我需要一个从任意维度缩放到256*256的图像 为了确保测试结果一致,我使用了一个256*256的图像,并将其调整为自己的大小 我所尝试的: imagecopyresized($new, $img, 0, 0, $x, 0, $width, $height, $w, $h); //256 , 256 及 它们都不起作用,如果我将输出与原始图像进行比

当我在做一些图像处理时,我发现PHP中的GD和Imagick并没有将图像调整为颜色像素相同的级别,这在大多数情况下是不需要的。 现在,为了以防万一,我需要一个从任意维度缩放到256*256的图像

为了确保测试结果一致,我使用了一个256*256的图像,并将其调整为自己的大小

我所尝试的:

imagecopyresized($new, $img, 0, 0, $x, 0, $width, $height, $w, $h); //256 , 256

它们都不起作用,如果我将输出与原始图像进行比较,它将如下所示:

看起来我使用的函数是对图像重新采样,因为两幅图像之间的RGB值变化很小

我可以在photoshop、OSX预览甚至Pixelformer中实现像素到像素相同的大小调整,从256*256调整到256*256。 我想知道如何在PHP中实现这一点?

因为您的图像格式(jpeg-假定为100质量设置)是一种有损格式,所以在重新压缩图像时,您不会以这种方式获得无损吞吐量

您应该尝试检测图像尺寸,如果尺寸已经正确,则使用原始图像

当您在Photoshop或OSX预览中不更改尺寸(原始尺寸=调整大小后的尺寸)时,它们不会重新压缩图像,这就是为什么您不会看到任何更改。

因为您的图像格式(jpeg-假定为100质量设置)是一种有损格式,当您重新压缩图像时,这种方式无法获得无损吞吐量

您应该尝试检测图像尺寸,如果尺寸已经正确,则使用原始图像


如果在Photoshop或OSX预览中不更改尺寸(原始尺寸=调整大小后的尺寸),它们将不会重新压缩图像,这就是为什么您看不到任何变化。

如果检测到像素尺寸相同,为什么不使用imagecopy?我不确定我是否完全理解您的问题,但每个图像处理库通常不会使用相同的精确算法。无论你的测试是什么,它们都不能依赖这样的假设。如果你检测到像素尺寸相同,为什么不直接使用imagecopy呢?我不确定我是否完全理解你的问题,但每个图像处理库通常不会使用相同的精确算法。无论您的测试是什么,它们都不能依赖于这样的假设。但是在我的代码中,有一行我将压缩值设置为100,这不是压缩。未压缩的图像不是会保持不变吗?即使我使用的是JPEG,当质量损失发生时;为什么像素的值在我压缩之前没有改变?例如=>imagecolorat($img)。。。。检索到的值与原始值不同。质量为100的jpeg远未解压缩如果解压缩后立即获得不同的颜色值,您可能需要检查图像中是否存在颜色配置文件,因为imagemagick/gd可能会忽略它们,这与某些图像编辑程序不同…ohh。。我没有想过,对吧,我将通过检查颜色配置文件来试一试,不,这就是为什么=>1)将图像读取到$img 2)imagecolorat($img)(在这一步中与原始图像相比没有变化)3)imagecopyresized($img)4)imagecolorat($img)再次,值现在被修改了…但是在我的代码中,有一行,我将压缩值设置为100,这不是压缩。未压缩的图像不是会保持不变吗?即使我使用的是JPEG,当质量损失发生时;为什么像素的值在我压缩之前没有改变?例如=>imagecolorat($img)。。。。检索到的值与原始值不同。质量为100的jpeg远未解压缩如果解压缩后立即获得不同的颜色值,您可能需要检查图像中是否存在颜色配置文件,因为imagemagick/gd可能会忽略它们,这与某些图像编辑程序不同…ohh。。我没有想过,对吧,我将通过检查颜色配置文件来试一试,不,这就是为什么=>1)将图像读取到$img 2)imagecolorat($img)(与此步骤中的原始图像相比没有变化)3)imagecopyresized($img)4)imagecolorat($img)再次修改值。。。
$compression_type = imagick::COMPRESSION_NO;
$images_ima = new Imagick($image_path);    //$image_path = path to image...
$images_ima->setImageCompression($compression_type); 
$images_ima->setImageCompressionQuality(100); 
$images_ima->sampleImage($X_SIZE,$Y_SIZE); // 256 ,256
$images_ima->writeImages($dest_path, true); //destination path