2012-07-19 36 views
1

我目前將上傳的圖片重新取樣爲靜態寬度和高度。我希望能夠以低於某個文件大小閾值的最高質量創建圖像的新副本。目前,我使用的是非常幼稚的方法 - 是這樣的:確定文件大小的適當圖像質量?

$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; 
} 

有沒有確定我應該用什麼質量更好的方法?

+0

[PHP GD Jpeg with a目標文件大小]的可能重複(http://stackoverflow.com/questions/7015864/php-gd-jpeg-with-a-target-filesize) – 2012-07-19 23:18:26

+0

@AlixAxel:如果您閱讀回答這個問題,你會發現這正是我已經發布並試圖避免的。 – FtDRbwLXw6 2012-07-19 23:20:43

+0

我不認爲你在做什麼托馬斯建議(http://stackoverflow.com/a/7016353/89771)...如果我是你,我會準備一些圖像,調整它們的不同品質,並使用它數據繪製一個線性迴歸(https://github.com/alixaxel/phunction/blob/master/phunction/Math.php#L546) - 然後您可以使用'm'和'b'(或它們在多個圖像之間的平均值)作爲你的一般表達來得到一個非常好的近似值。 – 2012-07-19 23:27:19

回答

2

生成的文件大小不僅取決於質量參數,還取決於圖像本身。一般來說,無法準確預測文件大小。

您可以爲您的典型圖像進行一系列測量,並創建一些可以讓您更快速地猜出精確質量參數的比例。

你也可以去二進制搜索,它會在迭代後收斂到足夠好的點。

+0

這是唯一正確答案,+1。 – 2012-07-19 23:29:56

+0

我認爲二進制搜索,但由於質量設置的文件大小指數下降,它決定它可能會比線性更多的迭代。例如,從100質量到90幾乎減半平均文件大小。因此,在大多數情況下,線性搜索的2次迭代將是所有需要的,其中二分搜索需要3-4次才能得出相同的結論。不過,我最終可能會試圖從一些隨機抽樣中確定一個近似比例。 – FtDRbwLXw6 2012-07-19 23:38:39

+0

好吧,在這個迭代次數中,它並不重要。 – spacediver 2012-07-20 04:39:57