加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 根据最大??文件大小缩放图像

发布时间:2020-12-13 13:40:50 所属栏目:PHP教程 来源:网络整理
导读:我正在使用Imagick,并希望将图像缩放到最大文件大小为2.5MB 我看一下这个SOF问题:ImageMagick: scale JPEG image with a maximum file-size这正是我想做的,但是来自Imagick的extent()方法没有size参数:http://www.php.net/manual/en/imagick.extentimage.p
我正在使用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,因此如果有一种方法可以在保存之前计算大小,那将是很好的

马克西姆,提前谢谢

您调用的范围函数只是设置图像的大小.

设置jpeg范围选项的功能是:

$imagick->setOption('jpeg:extent','2500kb');

有趣的是,设置此选项后,函数$imagick-> getImageBlob()似乎崩溃了.您被迫将文件写入磁盘,而不是直接获取它的字节.

The output format is always JPEG so if there is a way to calculate the size before to save it that would be great

没有.对于给定的图像质量,每个图像中的细节量决定了压缩后图像的大小.因此,无法计算出最终尺寸的质量水平.

底层Ima??ge 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;
    }
}

即它只是以不同的图像质量级别重新压缩文件,直到找到给出给定值的可接受文件大小的级别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读