2011-03-09 67 views
6

我想對用戶上傳的圖像設置一些限制,所以處理它們的腳本永遠不會耗盡內存。如何計算處理圖像所需的內存?

需要更多記憶的圖像是具有更高分辨率的圖像。它們不需要以字節爲單位的大尺寸。例如,一張分辨率爲4000x2500的46kb圖像和一些透明膠片(PNG)花費了大約90mb的大小來調整大小。

有沒有辦法預先準確計算所需的內存?

任何想法?

+1

我對圖像處理知之甚少,但是解壓縮後的位圖文件大小並不是一般的大概? – drudge 2011-03-09 23:43:34

+0

我使用的一般經驗法則:水平*垂直* 4只是爲了使用GD加載圖像,加上相同的計算大小的圖像...以字節爲單位 – 2011-03-09 23:51:51

回答

3

通常,對於源圖像和目標圖像,經驗法則是width x height x 4(rgba),並且不要忘記腳本本身已經消耗的內存量。

+1

它不工作。我有這個:(4000 * 2462 + 300 * 185)* 4/1024/1024 = 37.78mb。沒有圖像處理部分的腳本大約需要1mb。隨着圖像處理,需要86.77mb。 – HappyDeveloper 2011-03-10 00:11:05

+0

這是奇特的,它一直爲我工作。對於測試,您可以在圖像調用之前和之後始終嘗試打印'memory_get_usage(true)',讓您知道使用了多少,並設計自己的算法。 – steveo225 2011-03-10 00:16:22

+0

也許我正在使用的圖像庫是在做一些愚蠢的事情。但是我用另一個庫進行了測試,發生了同樣的情況。如果我只使用GD,我相信它可以正常工作,所以我會接受你的答案。 – HappyDeveloper 2011-03-10 00:30:11

0

文件上傳後使用GD庫可以使用getimagesize()。然後,您可以檢查高度和寬度,以確定是要處理它還是返回一個錯誤,並且還會返回每種顏色使用的位數,如果您還想考慮這一點。

因此,您的驗證可以在文件大小和尺寸。