图像处理
Pillow官方文档:https://pillow-cn.readthedocs.io/zh_CN/latest/index.html
样例结果:https://github.com/JMbaozi/absorb/tree/master/img/PillowCrop
Pillow 是 PIL 的替代版本,PIL 软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。你可以通过
$ pip install --use-wheel Pillow
from PIL import Image
来安装并使用
图片裁剪
Image.crop(left, up, right, below)left:与左边界的距离 up:与上边界的距离 right:还是与左边界的距离 below:还是与上边界的距离。(left,up),(right,below)分别为左上角和右下角的坐标 矩形选区由一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,所以以下代码复制了一个 900x900 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。(注意:裁剪的范围一定要在图片的范围之内)
rect = (100,100,1000,1000)
image.crop(rect).show()
- 将一张图片裁剪成九宫格:
from PIL import Image
image = Image.open('img/PillowCrop/成果.jpg')
imgSize = image.size #size(weight,height)=(2922,3992)
imgWeight = int(imgSize[0] // 3)
imgHeight = int(imgSize[1] // 3)
for i in range(3):
for j in range(3):
box = (imgWeight*j,imgHeight*i,imgWeight*(j+1),imgHeight*(i+1))
result = image.crop(box)
result.save("img/PillowCrop/{}{}.jpg".format(i,j))
- 修改图片格式:
f,e = os.path.splitext('img/PillowCrop/成果.jpg')
outimg = f + '.png'
if image != outimg:
try:
image.save(outimg)
except IOError:
print("Don't convert",image)
- 创建图片缩略图:
size = (333,333)
outimg = os.path.splitext('img/PillowCrop/成果.jpg')[0]+"_thumbnail.jpg"
image.thumbnail(size)
image.save(outimg,"JPEG")
- 复制粘贴到图片
imgSize = image.size
imgWeight = int(imgSize[0] // 3)
imgHeight = int(imgSize[1] // 3)
crop_size = (imgWeight*1,imgHeight*1,imgWeight*3,imgHeight*2)
img_crop = image.crop(crop_size)
#img_crop.show()
img_paste = Image.new('RGB',imgSize)
#img_paste.show()
img_paste.paste(img_crop,(imgWeight*1,imgHeight*1))
#img_paste.show()
img_paste.save('img/PillowCrop/复制粘贴.jpg')
- other
全部代码
#教程地址:https://github.com/JMbaozi/Python-100-Days/blob/master/Day01-15/15.图像和办公文档处理.md
#Pillow官方文档:https://pillow-cn.readthedocs.io/zh_CN/latest/index.html
from PIL import Image
import os,sys
image = Image.open('img/PillowCrop/成果.jpg')
# format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。
# size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。
# mode 属性定义了图像bands的数量和名称,以及像素类型和深度。
# 常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
# image.format,image.size,image.mode
#裁剪图像
# Image.crop(left, up, right, below)left:与左边界的距离 up:与上边界的距离 right:还是与左边界的距离 below:还是与上边界的距离
# [(left,up),(right,below)]分别为左上角和右下角的坐标
# 矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,
# 所以以下代码复制了一个 900x900 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。
# rect = (100,100,1000,1000)
# image.crop(rect).show()
#裁剪九宫格
"""
imgSize = image.size #size(weight,height)=(2922,3992)
imgWeight = int(imgSize[0] // 3)
imgHeight = int(imgSize[1] // 3)
for i in range(3):
for j in range(3):
box = (imgWeight*j,imgHeight*i,imgWeight*(j+1),imgHeight*(i+1))
result = image.crop(box)
result.save("img/PillowCrop/{}{}.jpg".format(i,j))
"""
#修改图片格式
"""
#f,e = os.path.splitext(image) #error
f,e = os.path.splitext('img/PillowCrop/成果.jpg')
outimg = f + '.png'
if image != outimg:
try:
image.save(outimg)
except IOError:
print("Don't convert",image)
"""
#创建图片缩略图
"""
size = (333,333)
outimg = os.path.splitext('img/PillowCrop/成果.jpg')[0]+"_thumbnail.jpg"
image.thumbnail(size)
image.save(outimg,"JPEG")
"""
#复制粘贴到图片
"""
imgSize = image.size
imgWeight = int(imgSize[0] // 3)
imgHeight = int(imgSize[1] // 3)
crop_size = (imgWeight*1,imgHeight*1,imgWeight*3,imgHeight*2)
img_crop = image.crop(crop_size)
#img_crop.show()
img_paste = Image.new('RGB',imgSize)
#img_paste.show()
img_paste.paste(img_crop,(imgWeight*1,imgHeight*1))
#img_paste.show()
img_paste.save('img/PillowCrop/复制粘贴.jpg')
"""
# image.show()
# print(image.format)
# print(type(image.format))