我正在尝试使用get_at
和set_at
来更改GIF图像的颜色,方法是查找非透明像素并将其更改为所需的颜色。
在OSX机器上它工作正常,透明颜色读作(0, 0, 0, 0)
并重新着色到我选择的任何颜色。但是当我在Windows 7机器上运行时,透明像素被读为(255, 255, 255, 0)
,导致整个图像变色。
我正在使用的代码如下:
player_border_w, player_border_h = thisGame.ready_border.get_size()
for y in range(player_border_h): # run for each image pixel
for x in range(player_border_w):
if thisGame.ready_border.get_at((x, y)) != TRANSPARENT: # (0, 0, 0, 0)
thisGame.ready_border.set_at((x, y), thisGame.ghost_colors[idx - 1]) # replace with desired color
任何人都可能知道是什么导致了这个和任何解决方案?
谢谢!
答案 0 :(得分:3)
颜色符号RGBA应该给你一个线索 - (红色,蓝色,绿色,Alpha)。因此,alpha通道表示不透明度 - 如果它设置为0,那么将其他颜色设置为什么并不重要。
所以你应该使用像
这样的方法def is_transparent(colour):
red, green, blue, alpha = colour
if alpha == 0:
return True
return False
或更简洁:
def is_transparent(colour):
return colour[3] == 0
至于为什么这是不同上OSX VS视窗,我会猜测要么底层图像读取库是完全不同的,或用于两个OS&之间该库中编译器的差别#39; s导致差异。