PHP Imagick 类 - 将 JPEG 转换为渐进式 JPEG?隔行不工作

Posted

技术标签:

【中文标题】PHP Imagick 类 - 将 JPEG 转换为渐进式 JPEG?隔行不工作【英文标题】:PHP Imagick Class - Convert JPEG's to Progressive JPEG's? Interlace not working 【发布时间】:2013-10-06 02:05:40 【问题描述】:

我正在尝试完成我的图像上传器,它利用 imagick 来处理各种图像类型。我试图开始工作的一件事是将 jpeg 文件转换为渐进式 jpeg。我已经尝试了下面的代码,但是当我查看在 irfranview 中输出的图像时,jpeg 不是渐进式的。有什么想法吗?

foreach ($thumbnailScaleWidths as $thumbnailScaleWidth) 
    $thumbnail = new imagick($uploadedFile['tmp_name']);
    $thumbnailDimensions = $thumbnail->getImageGeometry();
    $thumbnailWidth = $thumbnailDimensions['width'];
    $thumbnailHeight = $thumbnailDimensions['height'];
    $thumbnailScaleHeight = ($thumbnailScaleWidth / $thumbnailWidth) * $thumbnailHeight;

    $thumbnail->thumbnailImage($thumbnailScaleWidth, $thumbnailScaleHeight);
    $thumbnail->setImageInterlaceScheme(Imagick::INTERLACE_PLANE);
    $thumbnail->writeImages($_SERVER['DOCUMENT_ROOT'] . "/Resources/Media/$userId/$internalName-$thumbnailScaleWidth.$fileType", true);

关于为什么这不输出渐进式 jpeg 的任何想法?

【问题讨论】:

嗨,Braydon,您找到制作渐进式 JPEG 的解决方法了吗? 【参考方案1】:

使用setInterlaceScheme 而不是setImageInterlaceScheme - 后者似乎没有任何作用,但前者对我来说很好。

【讨论】:

将其修改为听起来更像是一个答案而不是评论,以回应有人将其标记为“不是答案”。现在这绝对是一个答案尝试,不应该被标记,但如果它是错误的(我没有使用 php 的经验,所以我不能说它是否是)你应该投反对票,而不是标记它。 我相信 setImageInterlaceScheme 应该在使用 Imagick 创建图像时使用,而不是编辑现有图像。很多事情都存在一对类似的方法。

以上是关于PHP Imagick 类 - 将 JPEG 转换为渐进式 JPEG?隔行不工作的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用 imagick 将 .HEIC 转换为 JPEG

在CentOS上为PHP安装Imagick和ImageMagick

为啥 Imagick 类不能将 pdf 文件转换为图像文件?

使用PHP Imagick将ICO转换为PNG。

在 PHP 中使用 Imagick 将 svg 转换为 png 时出现奇怪的裁剪问题

ImageMagick/Imagick 使用原生 PHP API 将 PDF 转换为 JPG