在 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);
$src_img = imagecreatefromjpeg('source.jpg');
imageinterlace($src_img, true);
imagejpeg($src_img, 'destination.jpg');
imagedestroy($src_img);
我正在尝试将已创建的 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);
$src_img = imagecreatefromjpeg('source.jpg');
imageinterlace($src_img, true);
imagejpeg($src_img, 'destination.jpg');
imagedestroy($src_img);