在 PHP 中将 JPEG 转换为渐进式 JPEG

Convert JPEG to a Progressive JPEG in PHP

我正在尝试将已创建的 JPEG 重新保存为 progressive jpg。

基本上,在前端我有一些 JS 可以裁剪图像,并输出 base64 图像 JPEG。将其传递给 PHP 脚本后,我将其创建为常规 JPEG 文件,如下所示:

$largeTEMP = explode(',', $_POST['large']);
$large = base64_decode($largeTEMP[1]);
file_put_contents('../../images/shows/'.$dirName.'/large.jpg', $large);

我希望这个 jpg 图像是渐进的,所以我环顾四周,找到了 PHP 函数 imageinterlace;但是,我似乎无法让它工作。我尝试了各种组合,但出于某种原因,我觉得我正在以错误的方式解决这个问题。

所以我的问题是,如何使用 PHP 将已生成的 JPEG 转换为渐进式?或者,更好的是,在我保存之前将其转换为渐进式 JPEG。

尝试 Imagick(ImageMagic 包),如下所示:http://php.net/manual/en/imagick.setinterlacescheme.php

$image = new Imagick('image.jpg');

$image->thumbnailImage(500, 0);

$image->setInterlaceScheme(Imagick::INTERLACE_PLANE);

$image->writeImage('progressive.jpg');

使用imagecreatefromstring创建图像资源:

$data = base64_decode($data);
$im = imagecreatefromstring($data);
if ($im === false) {
  die("imagecreatefromstring failed");
}
imageinterlace($im, true);
imagejpeg($im, 'new.jpg');
imagedestroy($im);

使用imageinterlace.

$src_img = imagecreatefromjpeg('source.jpg');

imageinterlace($src_img, true);

imagejpeg($src_img, 'destination.jpg');

imagedestroy($src_img);