假設你想縮放一個透明圖像,但還不知道背景的顏色,你將其複合到以後。不幸的是,PIL似乎包含了完全透明像素的顏色值,導致了不好的結果。有沒有辦法告訴PIL調整大小忽略完全透明的像素?PIL保存透明度和顏色的縮放圖像?
import PIL.Image
filename = "trans.png" # http://qrc-designer.com/stuff/trans.png
size = (25,25)
im = PIL.Image.open(filename)
print im.mode # RGBA
im = im.resize(size, PIL.Image.LINEAR) # the same with CUBIC, ANTIALIAS, transform
# im.show() # does not use alpha
im.save("resizelinear_"+filename)
# PIL scaled image has dark border
與(0,0,0,0)(黑色但完全透明)背景(左)
輸出圖像與黑暈(中)的原始圖像
正確的輸出與gimp比例縮放(右)
編輯:它看起來像實現我正在尋找的,我將不得不修改resize函數本身的採樣,使它會忽略具有完全透明度的像素。
edit2:我發現了一個非常醜陋的解決方案。它將全透明像素的顏色值設置爲周圍非完全透明像素的平均值,以便在調整大小時最大程度地降低完全透明像素顏色的影響。它的速度很慢,但如果沒有其他解決方案,我會發布它。通過使用擴張操作來處理必要的像素可以使其更快。
EDIT3:預乘alpha是要走的路 - 看到馬克的回答
是你的文件時加載到圖片什麼模式?也許alpha通道已經被刪除了? – Ber
它說RGBA和縮放的圖像在邊界以外的GIMP中也看起來很好。 – Gonzo
您是否嘗試將縮放後的圖像混合在其他物體上,如白色背景?縮放是否可以,那麼黑色的邊緣會消失。 – Ber