文章目录
PIL库
1、导入图片
from PIL import Image
im = Image.open("1.jpg")
# 或者从打开的文件中导入
with open("1.jpg", "rb") as fp:
im.Image.open(fp)
# 或者读取二进制数据
import io
im = Image.open(io.BytesIO(buffer))
# 或者从.tar文件中读取
from PIL import TarIO
fp = TarIO.TarIO("text.tar", "1.jpg")
im = Image.open(fp)
# 打开失败将出现IOError异常
2、图片信息
属性 | 含义 | 返回值 |
---|---|---|
format | 格式 | 图片格式名 |
size | 大小 | 包含宽度和高度的二元组 |
mode | 类型 | “I”:灰度图像"RGB":真彩色图像"CMYK":预印图像 |
3、Image类方法
-
im.show() # 显示图片
-
im.save(filename, mode) # 保存图片
-
im.transpose(Image.ROTATE_180) # 旋转180度 im.transpose(Image.FLIP_LEFT_RIGHT) # 左右颠倒 out = im.transpose(Image.FLIP_TOP_BOTTOM) # 上下颠倒
-
im.resize((128, 128)) # 重新设置大小
-
im.rotate(45) # 旋转
-
im.filter() #使用过滤器
-
im.point() # 采用点变换
-
im.merge(mode, RGB)
4、图片格式转换
import os
import sys
from PIL import Image
# 命令行模式下运行程序,sys.argv获取输入的字符串
# 如输入:python convert.py test.jpg
# 则sys.argv[0]为"convert.py", sys.argv[1]为"test.jpg"
# 输入的"python"不予获取
for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
try:
with Image.open(infile) as im:
im.save(outfile)
print("saved", outfile)
except IOError:
print("cannot convert", infile)
5、创建缩略图
import os
import sys
from PIL import Image
size = (128, 128)
for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".thumbnail"
if infile != outfile:
try:
with Image.open(infile) as im:
im.thumbnail(size)
im.save(outfile, "JPEG")
except IOError:
print("Cannot create thumbnail for", infile)
6、截取图片
box = (100, 100, 400, 400)
region = im.crop(box)
7、粘贴图片
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
8、颜色带
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
9、模式变换
from PIL import Image
with Image.open("1.jpg") as im:
im = im.convert("L")
10、图像处理
-
filter
:from PIL import ImageFilter out = im.filter(ImageFilter.DETAIL)
-
point
:# 每个点的像素都乘以1.2 out = im.point(lambda i: i * 1.2)
-
处理单独的颜色带:
source = im.split() R, G, B = 0, 1, 2 mask = source[R].point(lambda i: i < 100 and 255) out = source[G].point(lambda i: i * 0.7) source[G].paste(out, None, mask) im = Image.merge(im.mode, source)
11、增强图像
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("%30 more contrast")
12、图像序列
with Image.open("1.gif") as im:
im.seek(1) # 跳到第二帧
try:
while 1:
im.seek(im.tell()+1)
im.show()
except EOFError:
pass
# 序列读取结束时将返回EOPError异常
from PIL import ImageSequence
for frame in ImageSequence.Iterator(im):
frame.show()
13、Postscript
from PIL import Image, PSDraw
with Image.open("1.jpg") as im:
title = "canteen"
box = (1*72, 2*72, 7*72, 10*72)
ps = PSDraw.PSDraw()
ps.begin_document(title)
ps.image(box, im, 75)
ps.rectangle(box)
ps.setfont("HelveticaNarrow-Bold", 36)
ps.text((3*72, 4*72), title)
ps.end_document()
im.show()
14、draft模式
# 只适用于JPEG和MPO文件
from PIL import Image
with Image.open(file) as im:
print("original =", im.mode, im.size)
im.draft("L", (100, 100))
print("draft =", im.mode, im.size)