2011-10-07 65 views
0

我最近編寫了一個使用php的圖像大小調整程序,該程序通過將圖像從另一個服務器上下載,調整大小並將它們保存到我們自己的程序來工作。如何使用寬度和高度來估計圖像的文件大小?

壞消息是我的主機帳戶只允許64M的php內存限制,而這只是沒有設置調整我的客戶端上傳的HUUUUGE文件大小(3-4mb)。如果符合這些圖像並打破腳本,它會吐出致命的錯誤。

儘管我已經通知了客戶端這個缺點,但是客戶端仍然繼續上傳大圖片並且腳本一直在打破。

在使用getimagesize()下載圖像之前,我可以獲取圖像的寬度和高度,如果我可以使用此信息來計算總體文件大小,則可以在圖像縮放器啓動之前將其分解出來,並用一個很好的「沒有圖像可用」的選擇。

如何使用寬度和高度來對圖像文件大小進行精確估計,假設它的位深度爲24?

回答

0

乘法。 只需將高度乘以寬度3. 並放入一些備用內存來處理所有這些字節。比如說,圖像大小的兩倍。

它與文件大小雖然沒有關係。

+0

非常感謝這個,我已經計算好了,但是讓它與文件大小相混淆 - 歡呼聲 –

3

內存中的映像始終對JPEG或GIF或BMP中壓縮的相同權重進行加權。它被稱爲BIT-MAP。因此,如果要計算內存中圖像的大小,請使用寬度,高度和位大小來獲得位權重,除以8,即可得到字節數。

$ByteSize = Width*Heigh*(24/8) 

注意,有可能在一些地區的形象得到更大的權重,如paletized圖像,它必須存儲圖像調色板在內存中,但大部分時間本應重量比少位圖。

+0

但是沒有上傳文件,沒有辦法在php中獲取寬度和高度! getimagesize()適用於已經上傳的文件 – 2011-10-07 12:26:37

+2

請注意,此規則有一些例外情況。例如,使用libjpeg的ImageMagick可以縮放非漸進式JPEG圖像,而無需將整個圖像加載到內存中;這就是維基百科如何能夠重新調整一些[可笑的大圖](http://commons.wikimedia.org/wiki/File:Georgetown_PowerPlant_interior_pano.jpg)。原則上,如果有人只是編寫軟件來完成這項工作,沒有理由說明類似的技術不能用於其他圖像格式。 –

0

上傳之前在服務器上你不能用php, 但你可以用javascript!

https://developer.mozilla.org/en/DOM/File

將在協同工作,並且能夠立即提供使用

fileInput.files[0].fileSize 

閱讀這些文件大小:

https://developer.mozilla.org/en/Using_files_from_web_applications http://hacks.mozilla.org/2009/12 /多文件輸入在firefox-3-6/

希望這可以幫助!

+0

aaaah,但它本來就這麼簡單!不幸的是,我的網站與上傳所有文件的外部軟件包交互,我完全無法控制這裏發生的事情。 :( –

+0

@BenAzouelos這些文件已經上傳並在本地可用?或者您可以通過$ _FILES獲得它們嗎? – 2011-10-07 12:30:25

+0

我有一個下載並提取的XML源,它提供了每個圖像的位置,但它們不在我的服務器上。然後我循環並在每個URL上使用一個圖像大小調整腳本,並保存到我的服務器。感謝這裏的回覆,我已經用一種技術解決了我的問題,以解決內存使用問題。 –

0

大小將始終取決於格式。壓縮圖像時,圖像本身的大小不會對文件大小產生任何影響。如果您使用位圖(或類似)格式,則可以獲得文件大小的良好讀取的唯一方法。

例如,JPEG的大小可能爲10MB,然後由於壓縮的工作方式而僅旋轉1 MB大小。

相關問題