由于作业需要做个给图像嵌入信息的程序,需要全自动,所以便开始倒腾PIL了(之前都是手动转BMP然后按照格式把其中的像素点信息取出来修改的)。
首先是安装,我是用的Mac OS,直接使用pip安装:
sudo pip install PIL --allow-external PIL --allow-unverified PIL
如果不加–allow-external PIL –allow-unverified PIL,会出现下面两个报错:
Some externally hosted files were ignored (use --allow-external PIL to allow). Some insecure and unverifiable files were ignored (use --allow-unverified PIL to allow).
安装好后就是使用了~~~
从文件中读取图像:
import Image im = Image.open("test.jpg") fp = open("test.jpg", "rb") im = Image.open(fp) import StringIO im = Image.open(StringIO.StringIO(buffer)) import TarIO fp = TarIO.TarIO("Imaging.tar", "Imaging/test/test.jpg") im = Image.open(fp)
查看图片格式等信息:
print im.format, im.size, im.mode
其中format为图片原格式,size为图片大小,mode为图片模式(L为灰度图,RGB为像素图……)。
查看图片:
im.show()
保存图片:
im.save('out.jpg') im.save('out.thumbnail', 'JPEG')
裁剪图片:
box = (100, 100, 400, 400) region = im.crop(box)
处理图片的一部分:
region = region.transpose(Image.ROTATE_180) im.paste(region, box)
将图片分解与合成:
r, g, b = im.split() im = Image.merge("RGB", (b, g, r))
需要注意的是要将图片先转换为RGB模式才能分解。
改变图片大小:
out = im.resize((128, 128))
图片旋转:
out = im.rotate(45) out = im.transpose(Image.ROTATE_90) out = im.transpose(Image.ROTATE_180) out = im.transpose(Image.ROTATE_270)
图片翻转:
out = im.transpose(Image.FLIP_LEFT_RIGHT) out = im.transpose(Image.FLIP_TOP_BOTTOM)
图片模式转换:
out = im.convert("L")
接下来是两个我最需要用到的函数:
获取字符串形式的图片中的像素信息:
im.tostring()
使用字符串形式的图片中的像素信息生成一张图片:
out = Image.fromstring('RGBA', im.size, im.convert('RGBA').tostring()
再附个PIL的教程。