我试着用Python图像库把gif转换成单个图像,
但这会导致奇怪的画面
输入gif是:
在我的第一次尝试中,我尝试将带有image.new的图像转换为
RGB图像,255255255为白色背景-与任何其他图像一样
我在网上找到的例子:def processImage( infile ):
try:
im = Image.open( infile )
except IOError:
print "Cant load", infile
sys.exit(1)
i = 0
try:
while 1:
background = Image.new("RGB", im.size, (255, 255, 255))
background.paste(im)
background.save('foo'+str(i)+'.jpg', 'JPEG', quality=80)
i += 1
im.seek( im.tell() + 1 )
except EOFError:
pass # end of sequence
但它会导致奇怪的输出文件:
我的第二个尝试是,首先转换RGBA中的gif,然后使用
它的透明遮罩,使透明片变白:def processImage( infile ):
try:
im = Image.open( infile )
except IOError:
print "Cant load", infile
sys.exit(1)
i = 0
try:
while 1:
im2 = im.convert('RGBA')
im2.load()
background = Image.new("RGB", im2.size, (255, 255, 255))
background.paste(im2, mask = im2.split()[3] )
background.save('foo'+str(i)+'.jpg', 'JPEG', quality=80)
i += 1
im.seek( im.tell() + 1 )
except EOFError:
pass # end of sequence
从而产生如下输出:
与第一次尝试相比的优势是,第一帧看起来很不错
但正如你所看到的,其余的都碎了
我下一步该怎么做?
编辑:
我想我离解决方案更近了
我不得不用第一张图片的调色板来处理其他图片,
并将其与前一帧合并(对于使用
差异图像)def processImage( infile ):
try:
im = Image.open( infile )
except IOError:
print "Cant load", infile
sys.exit(1)
i = 0
size = im.size
lastframe = im.convert('RGBA')
mypalette = im.getpalette()
try:
while 1:
im2 = im.copy()
im2.putpalette( mypalette )
background = Image.new("RGB", size, (255,255,255))
background.paste( lastframe )
background.paste( im2 )
background.save('foo'+str(i)+'.png', 'PNG', quality=80)
lastframe = background
i += 1
im.seek( im.tell() + 1 )
except EOFError:
pass # end of sequence
但我真的不知道,为什么我的透明度是黑色的,而不是白色的
即使我修改了调色板(将透明度通道更改为白色)
或者使用透明遮罩,背景仍然是黑色的