2013-10-09 39 views
0

我想讓一些白色像素透明,但是我做錯了什麼。Python成像庫 - 改變alpha值的麻煩

我可以改變像素的顏色,但是我的代碼似乎忽略了對alpha值所做的任何修改。我對PIL和Python一般都很陌生,所以這可能是一個相對簡單的錯誤。

下面的代碼:

image_two = Image.open ("image_two.bmp") 
image_two = image_two.convert ("RGBA") 

pixels = image_two.load() 

for y in xrange (image_two.size[1]): 
    for x in xrange (image_two.size[0]): 
     if pixels[x, y] == (0, 0, 0, 255): 
      pixels[x, y] = (0, 0, 0, 255) 
     else: 
      pixels[x, y] = (255, 255, 255, 0) 

image_two.save("image_two") 
+0

在最後一行中,'image'應該是'image_two',是嗎? – Brionius

+0

是的,你說得對,我會解決的。 –

回答

0

我PIL的版本不支持alpha通道的BMP文件。我能夠使用你的代碼加載一個帶有alpha的PNG文件。當我嘗試將其寫回到BMP文件時,我得到一個python異常,告訴我「IOError:無法將模式RGBA寫入BMP」。

您的代碼表示:

if pixels[x, y] == (0, 0, 0, 255): #black with alpha of 255 
     pixels[x, y] = (0, 0, 0, 255) #black with alpha of 255 
    else: 
     pixels[x, y] = (255, 255, 255, 0) #white with alpha of 255 

一個白色像素將有R,G和B設定爲 「255」。所以,可能是你想要做的是這樣的:

if pixels[x,y] == (255,255,255,255): 
    pixels[x,y] = (pixels[x,y][0], pixels[x,y][1], pixels[x,y][2], 0) #just set this pixel's alpha channel to 0 

,你可能不想去觸摸你可能不需要一個人在這裏,因爲如果像素不是255的白色字母。

我修改你的代碼是這樣的:

import Image 

image_two = Image.open ("image_two.png") 
image_two = image_two.convert ("RGBA") 

pixels = image_two.load() 

for y in xrange (image_two.size[1]): 
    for x in xrange (image_two.size[0]): 
     if pixels[x, y][3] == 255: 
      pixels[x, y] = (255, 0, 0, 255) 
     else: 
      pixels[x, y] = (255, 255, 255, 255) 

image_two.save("image_two2.png") 

這段代碼使用我的形象,並寫出面具 - 一個白色像素,其中的α是0和紅色像素,其中阿爾法是255

+0

我仍然有alpha值的問題 - 我必須做錯了什麼。我嘗試使用下面的代碼來調整alpha通道 - 如果像素[x,y] ==(255,255,255,255): 像素[x,y] [3] = 0#只是將此像素的alpha通道設置爲0但是我遇到了與以下錯誤 - TypeError:'元組'對象不支持項目分配。到目前爲止,我還沒有能夠調整阿爾法,它仍然在255,我認爲我做錯了什麼。你在上面的代碼中使用了什麼來調整alpha? –

+0

我編輯了我的代碼。它使用舊元組的前三個組件加上0來創建一個完整的新元組。 –

+0

剛剛發現PIL不承認BMP的alpha通道,所以這就是爲什麼沒有任何工作的原因!是否可以刪除白色像素?或者我將不得不弄清楚如何在PIL中轉換BMP?我想第一個選項會更容易,但是我不熟悉這樣做的語法。感謝您的所有幫助! –