PHP如何做出影像銳利化效果

一般來說,當我們將圖檔縮小SIZE後,圖檔多少會有點模糊。以我用影像處理軟體在處理MSN的圖案來說,每次將照片縮成96x96後,總是會再利用像處理軟體做銳利化處理。讓縮小後的照片看起來比較清晰。

現在的網站,充斥者大量的圖片。為了頁面上整體性、或美觀,多少也會運用到即時縮小圖檔的功能。最近剛好在協助處理這類的事情,看者頁面上排者縮小後的圖檔,真是不習慣這些糊糊的圖片…不經想提升縮小後圖檔的品質…

當圖檔縮小後,怎麼使用PHP做出銳利化效果,讓縮小後的圖變的清楚呢?找了一下php GD文件,並測試了一下。

我以浮在雲海上的台北101的圖做為範例。將原圖分別做兩種處理。一個是僅做縮圖(下圖右側)、另一個是縮圖並銳利化(下圖左側)。執行的結果如下…效果還不錯…

>>點此看大圖,比較容易看出差異。

銳利化的效果怎麼做?說穿了,很簡單…利用imageconvolution() — Apply a 3x3 convolution matrix, using coefficient and offset
附註:僅支援PHP 5.1.0以上版本

藉由設定這3x3 convolution matrix,可以達到不同影像處理效果。目前蒐集到銳利化的參數主要有兩種。
  1. //sharp - 1  
  2. $matrix = array  
  3. (  
  4. array(-1, -1, -1),  
  5. array(-1, 16, -1),  
  6. array(-1, -1, -1),  
  7. );  
  8. //sharp - 2   
  9. $matrix = array  
  10. (  
  11. array(-1.2, -1, -1.2),  
  12. array(-1, 20, -1),  
  13. array(-1.2, -1, -1.2)  
  14. );   
多次測試後,上述兩種參數做出的銳利化,我的眼睛看不出有明顯的差異。

後來,在GIMP的範例中看到另一組參數。但是他的銳利化效果太強了,個人覺得反而影響到影像品質。
  1. //sharp - GIMP  
  2. $matrix = array  
  3. (  
  4. array(-1, -1, -1),  
  5. array(-1, 16, -1),  
  6. array(-1, -1, -1),  
  7. );  
上述所提的三種參數是針對銳利化所做。如果想要做不同的影像效果,可調整上述參數,做出模糊等等不同的效果。

如果想要自己調整參數做出其他效果,可以利用一些影像處理軟體上的功能先做測試。以我習慣使用的免費影像處理軟體GIMP來說,就有此功能(請見參考資料)。除此,找了一下,VIPBase也有這樣的功能。

最後,提一下兩件事情…
  1. 實際應用上,圖檔來源所呈現的內容可能差異很大(如,只是單純的文字圖檔、或複雜的風景、人物)、另外,原始影像品質參差不齊。所以,參數的設定最好是保守一點。
  2. 圖檔縮小並做銳利化處理,和僅作縮圖的圖檔相比,有做銳利化的檔案SZIE會稍微大一些。(採相同壓縮比時)

參考資料

  1. GIMP - Convolution Matrix
  2. UDF Basics - Create your own User Defined Filters in Paint Shop Pro 8,
    starting with blur filters.
  3. VIPBase: free image and video processing utility - User defined filter
  4. imageconvolution — Apply a 3x3 convolution matrix, using coefficient and offset

留言