我正在使用Imagick并希望将图片缩放到最大文件大小2.5MB
我查看了这个SOF问题:ImageMagick: scale JPEG image with a maximum file-size这正是我想要做的,但Imagick的extent()
方法没有size参数:http://www.php.net/manual/en/imagick.extentimage.php
任何人都知道我该怎么做?目前,我正在尝试计算原始文件大小和目标文件大小之间的系数,以计算新的分辨率,但发现分辨率与文件大小不成比例。
更新 - 输出格式始终为JPEG,因此如果有办法在保存之前计算尺寸,那就太棒了
提前致谢,Maxime
答案 0 :(得分:2)
您正在调用的范围功能只是设置图像的大小。
设置jpeg范围选项的功能是:
$imagick->setOption('jpeg:extent', '2500kb');
有趣的是,设置此选项后,函数$ imagick-> getImageBlob()似乎崩溃了。您被迫将文件写入磁盘,而不是直接获取它的字节。
输出格式始终是JPEG,所以如果有一种方法可以在保存之前计算大小
没有。对于给定的图像质量,每个图像中的细节量决定了压缩后图像的大小。因此,无法计算出最终尺寸的质量水平。
底层Image Magick库中限制文件大小的C代码是:
maximum=101;
for (minimum=2; minimum < maximum; )
{
jpeg_image->quality=minimum+(maximum-minimum+1)/2;
status=WriteJPEGImage(jpeg_info,jpeg_image);
if (GetBlobSize(jpeg_image) <= extent)
minimum=jpeg_image->quality+1;
else
maximum=jpeg_image->quality-1;
}
}
即。它只是以不同的图像质量级别重新压缩文件,直到找到给出给定值的可接受文件大小的级别。