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

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

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

我的 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 一起使用:

php信息

怎么了?


慕少森
浏览 94回答 1
1回答

HUX布斯

您显然知道 ImageMagick 使用 Ghostscript 将 EPS 文件渲染为 JPEG。我建议,不要使用 ImageMagick,而是直接使用 Ghostscript。与使用 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 渲染。
打开App,查看更多内容
随时随地看视频慕课网APP