Python Pillow(PIL)包简单处理图片

最近用到了Python里处理图片的Pillow库,简单的操作先记录下来。下面会有对代码中标记了数字的部分进行解析,更多内容请查看官方文档,入口点这里。

代码段如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image

# 1 打开图片
tower = Image.open("tower.jpg")

(x, y) = tower.size

# 2 底图
pic = Image.new('RGB', (2*x,2*y), (255,255,0))

# 3 拼图
m,n=int(x/2),int(y/2)
pic.paste(tower, (m,n))

# 4 处理图片
pic1=pic.resize((30,40))
pic2=pic.transpose(Image.ROTATE_90)
pic3=pic.rotate(90)
pic4=pic.convert("RGBA")
pic5=pic.convert("L")

# 5 图片保存
pic1.save("./pictures/pic1.jpg")
pic2.save("./pictures/pic2.jpg",quality=95)
pic3.save("./pictures/pic3.jpg")
pic4.save("./pictures/pic4.png")
pic5.save("./pictures/pic5.jpg")
pic1.save("./pictures/pic6.jpg",dpi=(300,300))

原始图片如下:
Python Pillow(PIL)包简单处理图片_第1张图片
#1 最简单的打开图片,打开之后返回一个image对象,通过它可以获取图片的一些信息,比如im.format,im.size, im.mode等。
#2 新建一个空白图片,需要提供图片的modesizecolormode包括RGB,RGBA,L,P等,比如一个jpg的图片,mode就是RGB,png图片对应的就是RGBA。color可以用颜色单词,比如red,可以用RGB值,比如(255,255,255),或者颜色代码,比如#FFFFFF.
#3 把tower粘贴在空白图片的中心位置。其中底图左上角坐标点为起始点(00),(mn)表示我想要粘贴的图片的左上角位置。
效果如下:
Python Pillow(PIL)包简单处理图片_第2张图片
#4 处理图片。
resize:缩放图片,这个会改变图片的质量,一般用的比较多的就是直接按照设定的比例缩放。
transpose:这个单词是置换,调换,它是可以把图片完全旋转指定角度。
效果如下:
Python Pillow(PIL)包简单处理图片_第3张图片
rotate:旋转图片,旋转之后原来的位置会显示为黑色。
效果如下:
Python Pillow(PIL)包简单处理图片_第4张图片
convert:转换图片为其他模式。比如想把jpg改为png,则改为RGBA,图片转黑白,则改为L,更多mode看这里。
L模式效果如下:
Python Pillow(PIL)包简单处理图片_第5张图片
#5 图片保存。保存不同类型的图片,支持不同类型的参数。之前看网上很多人说PIL不支持dpi设置,其实是支持的。不同类型图片支持的参数可以看这里。
Python Pillow(PIL)包简单处理图片_第6张图片
这里想多说几句dpi,它和图片的物理尺寸相关。如果不设置dpi的话,一般jpg默认的是96(在我电脑上面保存是96)。dpi描述了图片的精度。同样像素的两张图片,dpi越高,图片的物理尺寸越大。如下图中,pic1为dpi=96,pic6为dpi=300打印出实际尺寸的差距:
Python Pillow(PIL)包简单处理图片_第7张图片
再举个例子,如果想到打出来固定物理尺寸的图片,又想增加精度,就需要设置较高的dpi,这个时候对应的像素值也会增加。如果有类似需求,可以先通过PS工具,打开任意图片,选择工具栏中的调整尺寸,填写期望的dpi和物理尺寸,算出对应的像素值,然后resize到对应的像素值,再使用dpi进行save

我也是最近有需要打印指定物理尺寸图片的需求,才接触这部分内容,如果有什么不明白的,欢迎一起讨论。

你可能感兴趣的:(Python实用库)