Python Imaging Library(PIL)使用小计

Reading time ~1 minute

由于作业需要做个给图像嵌入信息的程序,需要全自动,所以便开始倒腾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的教程

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017