2012-02-15 116 views
4

我想要更改此圖像的黑色邊框: http://dev.loungeup.net/im/ 在PHP中使用Imagick透明。Imagick。將顏色更改爲透明

結果圖像應該有可見的灰色邊框,可見的灰色邊框內的圖像以及灰色邊框外的所有內容(今天是黑色)應該是透明的,並讓底層內容(例如HTML頁面中)可見。

我已經通過了幾次文檔,並嘗試了幾個解決方案,但沒有弄清楚如何實現它。

任何幫助表示讚賞。

感謝

回答

13

這裏,你可以使用一個方法,類似於Photoshop的魔術棒工具:

convert original.jpg -alpha set -channel alpha -fuzz 18% \ 
-fill none -floodfill +0+0 black transparent-border.png 

下面是細分的命令:

convert original.jpg:與原始圖像開始的ImageMagick

-alpha set:激活alpha通道

-channel alpha:對alpha通道隨後的操作員動作

-fuzz 18%:見-floodfill ...

-fill none:見-floodfill ...

-floodfill +0+0 black:從左上角(+0+0)啓動和找到-fuzz顏色距離內的相鄰像素black並替換它會-fill

transparent-border.png:輸出圖像

這裏的結果: Imagemagick Method 1

不幸的是,你可以看到,這種方法仍有與您提供的圖片有些暗像素,因爲邊界不是純黑色,並融合了與內部的灰色邊界位,並且圖像本身是非常小的。

如果您有更高質量的源圖像,或者更大的圖像,然後在修改後可以縮小圖像,則會獲得更好的結果。

如果你被這些小圖片卡住(或者如果你只是想用另一種方法),我會建議去一個不同的路線,你創建自己的面具形狀,它只是比原始照片的形狀小,然後加回你自己的灰色邊框。下面我彙總了一個這個過程的例子。

這種方法的一個可能的命令是:

convert original.jpg mask.png -compose CopyOpacity -composite \ 
-compose src-over new-border.png -composite clean-result.png 

...打破...

convert original.jpg mask.png:與原始圖像開始ImageMagick的和麪具帶來。png作爲第二層(mask.png是黑色背景上的白色圓角矩形形狀的照片,但形狀略小於原始形狀 - 結果將移除原始的灰色和黑色邊框)。

-compose CopyOpacity -composite:使用從mask.png original.png

-compose src-over到 「敲除」 的形狀:復位複合物的方法,以一個簡單的覆蓋

new-border.png -composite:覆蓋灰色邊框(PNG是3像素寬邊界,1px的上掩模邊緣的每一側上的透明背景)

clean-result.png:輸出圖像

我創建mask.png和新border.png在Photoshop中。你可能使用Imagemagick的矢量工具,並使用original.jpg在一個命令中執行此操作,但這並不容易。

以上的結果: Imagemagick Method 2

關於最後一點,我不知道您是否使用PHP的Imagick或ImageMagick的命令行。幾年前我嘗試過使用Imagick,但很快就因缺乏文檔而與命令行相比感到沮喪(但也許這已經發生了變化)。相反,我執行來自PHP的命令(例如,從exec()passthru())。一些或許多其他人可能會告訴你,你永遠不應該從PHP執行shell命令,但只要你小心翼翼地逃避任何論點,我還沒有看到一個令人信服的論點反對這樣做。然後,您將獲得整個Imagemagick文檔(http://www.imagemagick.org/Usage/)。

乾杯。

+0

你知道如何在不知道圖形大小的情況下從右下角進行洪水填充嗎? – alfC 2015-08-01 17:49:00

+1

@alfC旋轉180度,填滿水然後旋轉回來:-) – 2015-11-24 10:36:32

相關問題