2015-10-22 23 views
1

我正在尋找使用Imagemagick(通過PHP)來處理透明背景和一些半透明像素(如漸變)的PNG。圖像將不得不被改變,像這樣: 1.使所有非透明像素相同,固色(黑色是細)
2.由25個像素擴大圖像內的形狀的邊緣使用Imagemagick複製photoshop的「擴展選擇」功能

與該輸入(透明BG,一些像素是半透明的):
Input PNG

我期望這樣的輸出:
Output PNG

這不僅僅是調整圖像。我正在尋找類似於Photoshop擴展選擇功能的功能(例如,頂部圓圈中的間隙由於比25像素擴展小而被否定)。

目前,我有掃描圖像並找到邊緣的代碼,但當圖像中存在多個不連接的圖形時失敗。 Imagemagick是否有辦法做到這一點,或者有沒有一種算法可以用來掃描圖像並生成我需要的輸出?速度的一個問題,但只要運作正常,我可以忍受緩慢的解決方案。

回答

4

這個答案是一項正在進行的工作,我想我們可以讓你有,但...

基本上,你的步驟1)意味着你要設置RGB通道,以黑整個圖像,同時使確定形狀的透明度 - 我認爲。好了,我們可以做到很多方面,但讓我們使用這樣的門檻:

convert shapes.png -threshold 100% result.png 

enter image description here

現在要擴展選擇,但選擇是唯一真正的阿爾法/透明通道所以我們將我們的操作限制在那個能夠保持速度的頻道上。在形態學方面,你正在尋找一個擴張,所以你可以做這樣的事情:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 result.png 

還有其他形狀(磁盤,鑽石等)和其它度擴張的(我選擇了25次擴張) - 有看看Anthony Thyssen出色的ImageMagick Examples頁面...... here

enter image description here

不知道是怎麼回事,在透明度的漸變,所以我已經與alpha通道一個額外的手段傳給-threshold其中:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 -threshold 99% result.png 

enter image description here

我會讓你把它翻譯成PHP - 應該很容易。

+0

這是一個完美的解決方案。不知何故,PHP Imagemagick擴展不支持形態學(儘管它在文檔中)。感謝您的優雅解決方案。 – Maximillian

+0

非常好 - 非常高興爲您效力!我很驚訝,形態的東西不在PHP版本。我通常不使用PHP,但是@emcconville可以揭示一些事情...... –