有什麼辦法讓圖像變得透明嗎?Python PIL 0.5 opacity,transparency,alpha
的僞代碼是這樣的:
from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)
我GOOGLE了它的幾個小時,但我無法找到任何有用的東西。
有什麼辦法讓圖像變得透明嗎?Python PIL 0.5 opacity,transparency,alpha
的僞代碼是這樣的:
from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)
我GOOGLE了它的幾個小時,但我無法找到任何有用的東西。
你能做這樣的事嗎?
from PIL import Image
image = Image.open('image.png') #open image
image = image.convert("RGBA") #convert to RGBA
rgb = image.getpixel(x,y) #Get the rgba value at coordinates x,y
rgb[3] = int(rgb[3]/2) or you could do rgb[3] = 50 maybe? #set alpha to half somehow
image.putpixel((x,y), rgb) #put back the modified reba values at same pixel coordinates
絕對不是最有效的做事方式,但它可能工作。我在瀏覽器中編寫代碼,因此它可能不會錯誤,但希望它可以給你一個想法。
編輯:剛纔注意到這個問題有多大。無論如何留下回答以備將來的幫助。 :)
我放在一起山核桃的答案,並從這個問題cr333的問題:
Using PIL to make all white pixels transparent?
...以及與此想出了:
from PIL import Image
opacity_level = 170 # Opaque is 255, input between 0-255
img = Image.open('img1.png')
img = img.convert("RGBA")
datas = img.getdata()
newData = []
for item in datas:
newData.append((0, 0, 0, opacity_level))
else:
newData.append(item)
img.putdata(newData)
img.save("img2.png", "PNG")
在我的情況,我有文字具有黑色背景並且只想要背景半透明,在這種情況下:
from PIL import Image
opacity_level = 170 # Opaque is 255, input between 0-255
img = Image.open('img1.png')
img = img.convert("RGBA")
datas = img.getdata()
newData = []
for item in datas:
if item[0] == 0 and item[1] == 0 and item[2] == 0:
newData.append((0, 0, 0, opacity_level))
else:
newData.append(item)
img.putdata(newData)
img.save("img2.png", "PNG")
我只是自己做了這個...即使我的代碼也許有點奇怪...但它工作正常。所以我在這裏分享。希望它可以幫助任何人。 =)
想法:透明pic意味着更低的alpha,它是元組中的第4個元素。
我的框架代碼:
from PIL import Image
img=open(image)
img=img.convert('RGBA') #you can make sure your pic is in the right mode by check img.mode
data=img.getdata() #you'll get a list of tuples
newData=[]
for a in data:
a=a[:3] #you'll get your tuple shorten to RGB
a=a+(100,) #change the 100 to any transparency number you like between (0,255)
newData.append(a)
img.putdata(newData) #you'll get your new img ready
img.save(filename.filetype)
我沒有找到合適的命令來自動完成這個工作,所以我自己寫。希望它會再次幫助。 XD
我意識到這個問題確實很舊,但是對於當前版本的Pillow(v4.2.1),有一個叫做putalpha
的函數。它似乎爲我工作得很好。我不知道是否適用於需要更改alpha的每種情況,但它確實有效。它爲圖像中的每個像素設置alpha值。看來,雖然你可以使用掩碼:http://www.leancrew.com/all-this/2013/11/transparency-with-pil/。
使用putalpha
這樣的:
from PIL import Image
img = Image.open(image)
img.putalpha(128) # Half alpha; alpha argument must be an int
img.save(dest)
其答案是否已使用PIL?我不相信有一種方法可以實現這個特定的模塊。 – xander
在[這個問題](http://stackoverflow.com/q/24731063/724176)中'reduce_opacity()'有幫助嗎? – Hugo