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异常
属性 | 含义 | 返回值 |
---|---|---|
format | 格式 | 图片格式名 |
size | 大小 | 包含宽度和高度的二元组 |
mode | 类型 | “I”:灰度图像"RGB":真彩色图像"CMYK":预印图像 |
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)
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)
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)
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))
from PIL import Image
with Image.open("1.jpg") as im:
im = im.convert("L")
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)
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("%30 more contrast")
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()
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()
# 只适用于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)