2011-06-08 51 views
2

我一直在環顧四周,想知道每個人用來調整圖像的大小,以防萬一我錯過了。PHP圖片大小調整 - 需要的意見

我正在使用php imageGD庫imagejpeg()等。

我已經不斷更新我的課,試圖「解決」這一種情況:

如果圖像的用戶上傳是說469x358和顯示結束畫面必須或設計,以適應一個120x80框內例如。如果我根據寬度調整大小,所得到的大小調整後的圖像將爲120x92,那麼我可以修改高度,但這會像素化或擠壓圖像,我也可以用imageGD或CSS溢出隱藏來裁剪結束。

我已經快速瀏覽過,並且看到有一些算法(bicubic ect)可以用來縮小圖像,使圖像變得銳利,所以它看起來並不像我看到的imageGD一樣。有沒有人使用過這種算法?

我也看過ImageMagick有人用過這個軟件嗎?它是否更好地縮小圖像?

我目前正在修剪隱藏溢出的結尾,但有沒有更好的方法?

+0

[Image Scaling](http://en.wikipedia.org/wiki/Image_scaling)給出了各種方法(算法)的粗略概述 - 至少是最常見的方法。什麼更好取決於你想達到什麼。 – hakre 2011-06-08 17:02:01

+0

我認爲在閱讀ImageMagick文檔大約5分鐘後,它就是要走的路我很震驚,我從來沒有真正聽說過或使用過它。它具有我希望http://www.imagemagick.org/Usage/resize/#resize的功能,它只會縮小較大的圖像並調整大小以適應指定的某個尺寸。這是其他人使用的嗎? – 2011-06-08 17:08:26

+0

總是依賴。如果它適合你,請使用它。我知道很多人對imagemagick充滿信心,所以繼續。我知道有一個新的版本可以更好地支持內存和處理器,但這僅僅是保證金 – hakre 2011-06-08 17:10:09

回答

2

如果圖像的用戶上傳是說 469x358和顯示結束畫面 需要是或者被設計爲一個盒子120x80例如內適合 。如果我 resize在基於寬度所產生的 調整後的圖像是120x92,我可以 就在這時,固定高度,但將 像素化或壓扁的圖像,我可以 也裁剪結束了與任何 imageGD或CSS溢出隱藏。

如果你的形象是358x469(縱向),並希望將其調整爲120x80,使圖像看起來不扭曲,這裏是數學:

358/469 = width/80 => width = 358*80/469 = 61px (approx) 

我們有一個更高的圖像我們」將使用最大高度和約束寬度。所需的120px寬度意味着圖像水平延伸;使用更好的算法,只能達到平滑度,但不能使用更好的算法使壓縮/拉伸的圖像看起來正常。

如果需要安裝,我建議您裁剪到合適的尺寸。您可以通過GD庫/ ImageMagick在服務器端執行此操作,或使用CSS背景定位在客戶端執行此操作。如果您使用GD,裁剪就像使用負偏移調整圖像的大小一樣簡單(有點類似於背景位置爲負的CSS背景)。

編輯1

如果是是否使用GD或IM的一個問題,我建議IM。我不確定輸出的質量,但就性能而言,IM將超越GD,特別是在處理高分辨率圖像時。如果您更喜歡GD,GD庫函數imagecopyresampledimagecopyresized相比會給您更好的結果,但CPU和/或內存使用率更高。

編輯2

我忘了提,我早就停止使用GD並切換到phpThumb。照顧大部分家務。它在內部使用GD和/或IM - 內置智能可以爲給定操作選擇最佳的可用方法。

0

有幾點可能會幫助您做出決定。

  • ImageMagick和gd2的重採樣輸出在很大程度上是相似的。我不確定重新採樣gd2執行什麼樣的操作,並且我相當肯定ImageMagick使用雙三次插值,但是無論哪種方式,在大多數情況下,雙三次和雙線性重採樣生成的輸出在縮小尺寸時幾乎相同。放大小圖像是雙三次插值真正分開的地方。 (即使如此,也存在一些病態情況,其中雙三次插值和雙線性插值之間的差異可能是驚人的 - 檢出http://en.wikipedia.org/wiki/Aliasing

  • 我沒有太多機會在​​PHP中使用ImageMagick模塊,但CLI版本快速重新採樣圖像。假設Imagick模塊速度相當快,您應該看到快速的性能。然而,在gd2的情況下,速度一直是一個問題 - 我經常使用它來生成每頁50多個縮略圖,並且延遲是顯而易見的。

  • gd2是大多數PHP安裝的一部分,並且API使用相當簡單。 Imagick似乎是一個PECL擴展。取決於您的託管服務提供商,這可能會也可能不是問題。

這就是說,我要指出,它的幾乎總是一個更好的主意,緩存大小調整圖像 - 特別是如果你是確保相同的圖像將被頻繁調整。例如,如果您正在創建一些在線商店,並且想要顯示圖像縮略圖,那麼如果您一次又一次通過調整器運行同一組圖像,則會特別吸引人。 OTOH適用於圖像變化更大的應用,實時調整大小可能是更好的選擇。

+0

我已經去了ImageMagick,它的linux命令實際上更容易編寫代碼。如果你使用linux命令,我會選擇使用ImageMagick,這對我的網站的外觀產生了巨大的影響,因爲我現在指定適合120x80的盒子,並且我獲得了適合它的優化圖像,不會再隱藏溢出! – 2011-06-10 17:09:45

+0

儘管如此,如果這與您的案例相關,請考慮緩存調整大小的圖像所帶來的好處。 – susmits 2011-06-13 05:43:58