微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP imagick-将eps转换为jpg但质量较差

如何解决PHP imagick-将eps转换为jpg但质量较差

我正在尝试将eps文件转换为jpg并调整其大小。我为此使用PHP imagick。 转换后质量很差。

我的eps,您可以在这里下载: https://www.file-upload.net/download-14285439/icon.eps.html

my jpg-img

我使用以下代码

if ( extension_loaded('imagick') ) {

    $imagePath = 'icon.eps';

    $imagick = new Imagick();
    $imagick->setResolution(300,300);        
    $imagick->setColorspace(Imagick::COLORSPACE_SRGB);
    $imagick->readImage($imagePath);
    $imagick->resizeImage(0,1000,Imagick::FILTER_lanczos,1);
    $imagick->setimageResolution(72,72);
    $imagick->setimageCompressionQuality(70);
    $imagick->setimageCompression(\Imagick::COMPRESSION_JPEG);
    $imagick->setCompressionQuality(70);
    $imagick->setimageFormat('jpeg');
    $imagick->writeImage('test.jpg');
} else {
    echo 'not found';
}

使用此设置的结果相同,但不调整大小/仅进行转换,但是质量仍然很差:

if ( extension_loaded('imagick') ) {

    $imagePath = 'icon.eps';

    $imagick = new Imagick();
    $imagick->setResolution(300,300);        
    $imagick->setColorspace(Imagick::COLORSPACE_SRGB);
    $imagick->readImage($imagePath);        
    $imagick->setimageFormat('jpeg');
    $imagick->writeImage('test.jpg');
} else {
    echo 'not found';
}

我在PHP 7.2.33中使用此版本:

phpinfo

怎么了?

解决方法

您显然知道ImageMagick使用Ghostscript将EPS文件渲染为JPEG。我建议您直接使用Ghostscript而不是使用ImageMagick。与使用ImageMagick相比,这将使您对过程有更多的控制,这意味着您可以发布Ghostscript命令行而不是IM命令行。

恐怕我不知道ImageMagick发送给Ghostscript的内容是什么,这使得提供任何建议相当困难。

此外,您确实需要更加明确地说明您的问题。 “质量很差”实际上是什么意思。这纯粹是主观的,还是您使用一些客观的标准?

您发布的图像看起来不太像我看到的图像,但是由于我不知道正在使用什么命令来驱动Ghostscript,因此可能只是我没有完全复制您的设置。

第一个音符; EPS的性质并不真正适合JPEG压缩。 JPEG在应用于平滑变化的图像(例如照片)时效果最佳(JPEG =联合图像专家组),不适用于大面积的带有锐利边缘的纯色区域(这正是您所拥有的),即尖锐的边缘会产生“振铃”或“边缘”效果。

直接使用Ghostscript时,可以更改JPEG质量。设置-dJPEGQ=100会产生最高的质量,需要权衡压缩(即输出文件会更大)。

此外,您的EPS给出其BoundingBox为20x20点。因此,每个尺寸为20/72英寸。即使以300 dpi的分辨率,也会产生84x84像素的图像。很小在72 dpi分辨率下,您将获得20x20像素的图像,

在我看来,您已经使用默认的JPEGQ值以72 dpi的分辨率渲染EPS,“劣质”似乎不过是JPEG压缩产生的众所周知的伪像。与Ghostscript一起使用该设置会产生与您发布的图像完全不同的内容(尽管没有尖锐的边角伪影)。将JPEGQ设置为100会产生更明智的效果。默认设置生成的文件为3,564字节,而更高质量的文件为4,485字节。

如果是我,我将以适当的分辨率渲染为TIFF文件,例如1200 dpi,以提供333x333像素的图像。然后将其加载到ImageMagick中,并将其调整为所需的尺寸。最后,如果出于某种原因需要将其导出为JPEG。

这是Ghostscript输出的比较。左侧是1200 dpi产生的JPEG,中间是72 dpi的默认质量渲染,右侧是JPEGQ设置为100的72 dpi渲染。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。