2012-06-06 117 views
1

我使用PHP的WideImage庫 - http://wideimage.sourceforge.net/有嚴重的性能問題。使用WideImage :: load()加載2.2 MB的.png文件的內存使用率高達93 MB!此外,加載,調整大小和寫入文件系統的750 KB .jpg需要將近30秒。我在兩臺具有相似結果的服務器上運行這些基準測試。PHP WideImage - 性能問題

是否有其他人遇到這些問題?它只是WideImage是一個資源豬?如果我用直GD重寫我的圖像處理,而不是WideImage,我能期待更好的性能,還是差不多?我知道PHP是不適合圖像處理的最好的語言,但我寧願沒有編譯的東西在C,然後從PHP :(

感謝您的時間把它叫做安迪 -

+0

你的問題是什麼?它似乎工作。您多長時間使用93 MB內存來調整大小?每個圖像只有一次?無論使用什麼庫或語言,我也認爲93 MB可以用於處理大型圖像。 – powtac

+0

真的嗎? 93MB的內存來操縱一張2.2MB的圖像? 30秒,調整1MB以下的JPG格式並將其寫入文件系統?這種性能無法在生產中飛行,尤其是在PHP分配有限內存的託管環境中。我不能指望用戶在等待JPG格式調整大小時起牀喝茶。 我見過很多PHP代碼,它們能夠更快,更精簡地完成這種事情,最近在我正在使用的WordPress插件中。我想我會用直GD重寫例程並比較性能。 – siliconrockstar

+0

由於我們對系統/ CPU沒有任何瞭解...... – powtac

回答

2

進行了一些簡化基準我想我想通了WideImage的大小調整的方法是不是永久性例:

$image = WideImage::load('path/to/file.png'); 
$image->getWidth(); <-- lets say that returns a width of 2000 pixels 
$image->resize(100, 100); 
$image->getWidth(); <-- that will still return a width of 2000 pixels, the original $image has not been altered 

WideImage操作返回圖像的新實例,並離開了以前的形象完好,所以要得到你所需要的操作的結果將其分配給一個變量:

$image = WideImage::load('path/to/file.png'); 
$image->getWidth();  // 2000 px 
$resizedImage = $image->resize(100, 100); 
$image->getWidth();  // still 2000 px 
$resizedImage->getWidth(); // 100 px 

所以我正在移動的圖像比我想象的要大得多,因爲我的調整大小的方法實際上並沒有改變我的源圖像。

+0

另外,我學習了PHP的內存使用情況,即使它們具有相同的大小和文件格式,它們之間的內存使用情況也可能在圖像之間有所不同。我有一個2.2MB的.jpg格式,在調整大小時可達到71MB的內存使用量,而4MB的.jpg格式只能達到32MB。不知道爲什麼。 – siliconrockstar

+0

另一方面,我確定WideImage增加了圖像處理的最小開銷。我試過的最大圖像在使用純GD功能時使用了90.4MB的內存,在使用WideImage時使用了92.7MB。希望所有這些都可以幫助那些在這個線程中蹣跚而行的人。 – siliconrockstar