Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 imagick-将eps转换为jpg,但质量较差_Php_Jpeg_Imagick_Imagemagick Convert_Eps - Fatal编程技术网

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

PHP imagick-将eps转换为jpg,但质量较差,php,jpeg,imagick,imagemagick-convert,eps,Php,Jpeg,Imagick,Imagemagick Convert,Eps,我正在尝试将eps文件转换为jpg并调整其大小。我使用PHPImagick来实现这一点。 转换后质量很差 您可以在此处下载我的eps: 我使用以下代码: if ( extension_loaded('imagick') ) { $imagePath = 'icon.eps'; $imagick = new Imagick(); $imagick->setResolution(300, 300); $imagick->setCol

我正在尝试将eps文件转换为jpg并调整其大小。我使用PHPImagick来实现这一点。 转换后质量很差

您可以在此处下载我的eps:

我使用以下代码:

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中使用此版本:


有什么问题吗?

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

恐怕我不知道ImageMagick发送给Ghostscript的是什么,这使得我很难提供任何建议

此外,你真的需要更明确地说明你的问题。你说的“质量很差”是什么意思。这纯粹是主观的还是客观的标准

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

第一个音符;EPS的性质并不真正适合JPEG压缩。JPEG在应用于平滑变化的图像时表现最佳,如照片(JPEG=联合摄影专家组),它不能很好地处理带有锐边的大面积平面颜色(这正是您在这里看到的),锐边的高频分量会产生“振铃”或“边缘”效果

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

此外,EPS的边界框为20x20点。每个维度都是20/72英寸。即使是300 dpi,也会产生84x84像素的图像。相当小。在72 dpi时,您将获得20x20像素的图像

在我看来,您使用默认的JPEG Q值以72 dpi的速度渲染EPS,“质量差”似乎只是由JPEG压缩产生的众所周知的人工制品。将该设置与Ghostscript一起使用会产生与您发布的图像并不完全不同的效果(尽管没有锐利的棱角人工制品)。将JPEGQ设置为100会产生更合理的效果。默认设置生成的文件为3564字节,而较高质量的文件为4485字节

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

下面是Ghostscript输出的比较。左边是在1200 DPI中生成的JPEG,中间是72 dPI的默认质量渲染,右边是72个DPI渲染,JPEGQ设置为100。