Pillow基本使用
(资料图片仅供参考)
新建一张图片im = Image.new("RGBA", (width, height))加载图片im = Image.open("Mycat.jpg")显示图片im.show()另存为其他格式im.save("Mycat.png")图片剪切box = (x1, y1 ,x2, y2) #图片左上角是坐标原点,横轴为x,纵轴为y,x2>=x1,y2>=y1im.crop(box) #剪切出来的图片是各点划线所围的矩形图片粘贴(一张图片覆盖到另一张图上面)im2 = Image.open("Mydog.jpg")im.paste(im2) #把im2贴到im上处理gifim = Image.open("Mypig.gif")im.tell() #显示当前帧数im.seek(1) #移动到指定帧im.show()读取像素值,色深可以为1,8,24,32位im.getpixel((x, y)) #图片左上角是坐标原点,横轴为x,纵轴为y修改像素值im.putpixel((x, y), (0, 0, 0)) #rgb(0, 0, 0),黑色,24位色深
取出GIF每一帧,合成为新的图片
gif把完整的图片细分成很多小的切片。
先取出gif的每一帧,存放在指定目录里
#!/usr/bin/env python3from PIL import Imagegif = Image.open("glance.gif")gif.save(f"frame/{gif.tell()}.png")while True: gif.seek(gif.tell() + 1) gif.save(f"frame/{gif.tell()}.png")
得到201张,每张宽高为2*600的图片。
新建一张图片,把每一帧依次覆盖在新的图片上。
#!/usr/bin/env python3from PIL import Imageim = Image.new("RGBA", (402, 600))w = 0for i in range(201): gif = Image.open(str(i) + ".png") box = (w, 0, w+2, 600) im.paste(gif, box) w += 2im.show()
获取图片RGB
104张黑白图片,考察01比特流。
im.getpixel((0,0))查看每张图片第一个像素点,可以看到白色图片第一个像素点RGB=(255, 255, 255),黑色图片第一个像素点RGB=(12, 12, 0)。不知道黑色和白色哪个代表0或1,两种情况都试试
#!/usr/bin/env python3from PIL import Imageimport binasciistreamA = ""streamB = ""for i in range(104): im = Image.open("gif/" + str(i) + ".jpg") if(im.getpixel((0,0))[0] == 255): streamA += "1" streamB += "0" else: streamA += "0" streamB += "1"#每8位二进制数为一个字节,二进制转为十进制,十进制转为asciistreamA_ascii = [chr(int(streamA[i:i+8], 2)) for i in range(0, len(streamA), 8)]streamB_ascii = [chr(int(streamB[i:i+8], 2)) for i in range(0, len(streamB), 8)]print("".join(streamA_ascii))print("".join(streamB_ascii))
最低有效位
题目:最低位的亲吻
获得一个8位色深的图片。
处理思路:像素最低位为1时,像素取值为255;像素最低位为0时,像素取值为0。
#!/usr/bin/env python3from PIL import Imageim = Image.open("01.png")width,height = im.sizefor i in range(width): for j in range(height): if im.getpixel((i, j)) & 0x1 == 1: im.putpixel((i, j), 255) else: im.putpixel((i, j), 0)im.show()
得到隐写的二维码