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

PHP imagick - Convert eps to jpg but poor quality

我正在尝试将 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';
}

与此设置相同的结果,无需 resize/only 转换,但质量仍然很差:

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。我建议,与其使用 ImageMagick,不如直接使用 Ghostscript。与使用 ImageMagick 相比,这将使您能够更好地控制该过程,并且意味着您可以 post Ghostscript 命令行而不是 IM 命令行。

恐怕我不知道 ImageMagick 发送给 Ghostscript 的内容,因此很难提供任何建议。

此外,您确实需要更明确地说明您的问题。 'the quality is very bad' 是什么意思?这纯粹是主观的还是您正在使用一些 objective 标准?

您 post 编辑的图像与我看到的不太一样,但由于我不知道使用什么命令来驱动 Ghostscript,可能只是因为我不是准确再现您的设置。

第一个注释;您的 EPS 的性质并不真正适合 JPEG 压缩。当应用于平滑变化的图像时,JPEG 表现最佳,例如照片(JPEG = 联合图像专家组),它不适用于大面积具有锐利边缘的平面颜色(这正是您在这里所拥有的),高频分量锐边会产生 'ringing' 或 'fringing' 效果。

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

此外,您的 EPS 将其 BoundingBox 指定为 20x20 点。所以每个维度都是 20/72 英寸。即使在 300 dpi 下,也会产生 84x84 像素的图像。相当小。在 72 dpi 下,您将获得 20x20 像素的图像,

在我看来,您使用默认的 JPEGQ 值以 72 dpi 渲染了 EPS,'poor quality' 似乎只不过是 JPEG 压缩产生的众所周知的人工制品。将该设置与 Ghostscript 一起使用会产生与您的 posted 图像完全不同的东西(尽管没有尖角人工制品)。将 JPEGQ 设置为 100 会产生更合理的结果。默认设置生成的文件为 3,564 字节,而更高质量的文件为 4,485 字节。

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

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