Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确定文件大小的适当图像质量?_Php_Image_Gd - Fatal编程技术网

Php 确定文件大小的适当图像质量?

Php 确定文件大小的适当图像质量?,php,image,gd,Php,Image,Gd,我目前正在将上传的图像重新采样为静态宽度和高度。我希望能够以低于特定文件大小阈值的最高质量创建图像的新副本。目前,我正在使用一种非常幼稚的方法——类似这样的方法: $size = NULL; $quality = 100; while ($size === NULL || $size > MAX_SIZE) { // write the image to disk using $quality clearstatcache(TRUE, $image); $siz

我目前正在将上传的图像重新采样为静态宽度和高度。我希望能够以低于特定文件大小阈值的最高质量创建图像的新副本。目前,我正在使用一种非常幼稚的方法——类似这样的方法:

$size = NULL;
$quality = 100;

while ($size === NULL || $size > MAX_SIZE) {
    // write the image to disk using $quality

    clearstatcache(TRUE, $image);
    $size = filesize($image);

    $quality -= 10;
}

有没有更好的方法来确定我应该使用的质量?

生成的文件大小不仅取决于质量参数,还取决于图像本身。通常,无法准确预测文件大小

您可以对典型图像进行一系列测量,并创建一些比例,以便更快地猜测准确的质量参数


你也可以使用二进制搜索,经过一些迭代后,它会收敛到足够好的点。

可能重复@AlixAxel:如果你读了这个问题的答案,你会发现这正是我已经发布并试图避免的。我不认为你在做Tomas建议的事()。。。如果我是你,我会准备一些图像,以不同的质量调整它们的大小,并使用这些数据绘制一个线性回归()-然后你可以使用
m
b
(或它们在多个图像之间的平均值)作为你的通用表达式,以获得非常好的近似值,但是,由于质量设置导致文件大小呈指数级下降,因此它可能需要更多的迭代而不是线性迭代。例如,从100质量到90质量几乎是平均文件大小的一半。因此,在大多数情况下,线性搜索只需要2次迭代,而二进制搜索需要3-4次迭代才能得出相同的结论。不过,我最终可能会尝试从一些随机抽样中确定一个近似的比例。好吧,在这样的迭代次数下,这并不重要。对于标准搜索,我会100%同意。我想我之所以关心这个问题,是因为我每次迭代都在进行文件I/O(当时我考虑每次将质量降低1,而不是10,但我已经放弃了)。我想这是唯一正确的答案。