Php Imagick::resizeImage和Imagick::scaleImage似乎会压缩/模糊图像,即使被告知不要这样做

Php Imagick::resizeImage和Imagick::scaleImage似乎会压缩/模糊图像,即使被告知不要这样做,php,imagemagick,image-manipulation,imagick,image-compression,Php,Imagemagick,Image Manipulation,Imagick,Image Compression,我在PHP Imagick库的resizeImage和scaleImage方法中遇到了一个奇怪而挑剔的问题。(客户不高兴,这是可以理解的,因为他们是摄影师) 每当调整图像的大小时,图像似乎会变得非常轻微地压缩,并且由于这种压缩,暗区域会变得略微像素化。即使我告诉它以完全质量渲染,也会发生这种情况,我将在下面解释 首先,这里是一个示例,包括一个4倍放大的版本,在该版本中更容易看到问题: 起初我认为这是插值方法的一些问题,但当我深入挖掘时,我意识到即使将图像大小调整到完全相同的大小,图像实际上仍然

我在PHP Imagick库的
resizeImage
scaleImage
方法中遇到了一个奇怪而挑剔的问题。(客户不高兴,这是可以理解的,因为他们是摄影师)

每当调整图像的大小时,图像似乎会变得非常轻微地压缩,并且由于这种压缩,暗区域会变得略微像素化。即使我告诉它以完全质量渲染,也会发生这种情况,我将在下面解释

首先,这里是一个示例,包括一个4倍放大的版本,在该版本中更容易看到问题:

起初我认为这是插值方法的一些问题,但当我深入挖掘时,我意识到即使将图像大小调整到完全相同的大小,图像实际上仍然会压缩

$viewport->unsharpMaskImage(0, 0.5, 1, 0);
上面的例子就是一个完美的例子。这是一个100x100图像,已使用以下代码将其大小调整为100x100:

$image->resizeImage($this->width, 0, Imagick::FILTER_CATROM, 1);
这似乎也有同样的结果,尽管我被告知这会更好:

$image->scaleImage($this->width, 0, Imagick::FILTER_CATROM, 1); 
第四个参数是
blur
(),我的理解是,缩略图图像会出现锯齿,但是,即使我将此值减小到0.001,也不会发生任何情况

即使我添加此代码以将图像质量设置为100%,它仍然会发生:

$image->setImageCompression(Imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(100);
有人能给我解释一下为什么这些人工制品会出现在图像的黑暗区域,以及我如何防止这种情况发生?在Photoshop中,这些图像的大小调整得非常好,因此这似乎是Imagick的一个独特问题,而不是图像本身不合适


正如我所说,我知道这是吹毛求疵,但我的客户实际上是一名摄影师,原始的图像质量对他们来说非常重要。

尝试使用不同的过滤器,速度较慢的过滤器应该会产生更好的效果。

我也面临同样的问题,仍然无法从图像中消除模糊。尝试了所有的组合。但最后我使用了锐化

$viewport->unsharpMaskImage(0, 0.5, 1, 0);
这看起来更好。
这是一个附加值。

您也尝试过0的模糊吗?是的,由于某种原因,0的模糊会返回与scaleImage相同的结果,但是,对于resizeImage,如果模糊设置为0,则会返回黑色图像,因此我假设必须进行设置。也许可以尝试使用较慢的过滤器之一?“文档”页面上的注释表明它们提供了更好的结果,而您使用的是最快的一个。我循环了所有过滤器,从一个过滤器到另一个过滤器,没有一个过滤器看起来更接近原始过滤器。你认为我觉得奇怪的是,图像在调整大小时会失去质量,即使被重新调整到相同的大小,还是我遗漏了什么?同样大小的像素并不意味着大小相同,因此可能会丢失信息。