最近在做信息隐藏的相关项目,需求是在jpg、png和gif中嵌入信息,jpg和png的很容易处理,但是gif就没有现成的方法了,需要自己琢磨一下。因为gif实质上也是一种图像格式,只是很多播放中的图像,所以我们可以截取其中一帧或几帧,然后采用对图像的嵌入方法进行嵌入,再将嵌入后的图像与原有结构中其他图像进行整合就好了,那么第一步就是将gif拆解为图像。
代码如下:
from PIL import Image, ImageSequence
def analyzeGIF(gifname):
im = Image.open(gifname)# 读取GIF
iter = ImageSequence.Iterator(im)# 获取GIF图片流的迭代器
index = 1
image=[]#存储我们转化gif中的每一帧
for frame in iter:#遍历图片
print("image",index,"mode",frame.mode,"size",frame.size)
image.append(frame)#在此步我们可以加上判断,获取我们想要的特定帧进行跳出即可
index += 1
im.save('tout.gif',save_all=True,append_iamges=image)#将迭代器中获取的图像组合为gif进行保存
相关函数介绍
iter = ImageSequence.Iterator(im)# 获取GIF图片流的迭代器
通过该函数,用户可以访问图像序列中的每一帧图像,获取了图像的迭代器。
im.save('tout.gif',save_all=True,append_iamges=image)
append_images为需要组合图像的列表。
其他
但是这种方法并不能实现在gif中嵌入盲水印的效果,图片整合为gif后的大小并不是所有帧图像大小的和,而是比他小很多的一个值,这说明图像整合为gif的算法有很强的压缩性,可能会对很多信息隐藏算法产生影响,目前采用的频域隐藏不能应对这种压缩算法。