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

php – 自动在Imagick中设置压缩级别以达到最大文件大小

发布时间:2020-12-13 16:19:48 所属栏目:PHP教程 来源:网络整理
导读:我正在检索图像的大小,因为它们被上传了Imagick: $im-getImageSize(); 这将返回图像的大小(以字节为单位). 我想自动设置压缩级别,以便文件大小永远不会超过一定的大小.如果我想限制为70kb,最小允许压缩级别为60(在0-100的范围内),我会从做这样的事情开始:
我正在检索图像的大小,因为它们被上传了Imagick:

$im->getImageSize();

这将返回图像的大小(以字节为单位).

我想自动设置压缩级别,以便文件大小永远不会超过一定的大小.如果我想限制为70kb,最小允许压缩级别为60(在0-100的范围内),我会从做这样的事情开始:

public function getCompLevel($size)
 {
                    $maxsize = 70000; // Set rough max size of file
                    $mincomp = 60;   // Set minimum compression level allowed


                    if($size > $maxsize ){   // If file size exceeds max allowed size,perform calculation
                        $comp = **EQUATION**
                    }

        return ($comp < $mincomp) ? $mincomp : $comp; // if output is less than minimum allowed compression,return minimum.  If not return calculated compression level
 }

我想弄清楚的是根据文件大小计算所需压缩级别的近似值所需的等式.我知道由于颜色影响文件大小,这可能不是那么准确,但我希望尽可能接近.

任何帮助将不胜感激.

解决方法

我喜欢这个问题,虽然没有正确答案.我已经复制了多个实例,其中变量$x表示从零开始的文件大小,并且会增加到最大文件大小的两倍.另外,我创建了一个变量$均衡器.此变量以指数方式工作,而将其设置为100将创建更高的压缩级别,或者更接近0将创建更大的间隙.

<?php
$max_file_size = 70000;
$max_compression = 60;
$equalizer = 100;

for($x=0;$x<$max_file_size+$max_file_size;$x+=10000){
    if($x < $max_file_size){
        echo $max_compression.'<br>';
    }else{
        echo $max_compression - (($x / $max_compression * $max_file_size) / ($max_file_size * $max_compression * $equalizer)).'<br>';
    }

}?>

在你的真实情况中,我会想象你的功能看起来像:

<?php
function getCompLevel($size){
    $maxsize = 70000;
    $compression = 60;
    $equalizer = 100;

    if($size > $maxsize ){
        $compression = $compression - (($size / $compression * $maxsize) / ($maxsize * $compression * $equalizer));
    }

    return $compression;
}?>

(编辑:李大同)

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

    推荐文章
      热点阅读