Python之Pillow(PIL)库

Python Imaging Library(PIL)是一个非常好用的图像处理库,功能非常强大。
Pillow支持读取、修改和保存多种图像格式,如JPEG、PNG、BMP、GIF等。您可以使用Pillow库来编写图像处理程序,如缩放图像、旋转图像、调整图像大小、对图像进行裁剪和粘贴等。

安装Pillow

pip install pillow

基本操作

from PIl import Image           # 导入PIL库中的image模块
img=Image.open('test.jpg')   # 打开照片
img.show()                      # 显示照片
print('照片的格式:',img.format)  # 输出:jpg 照片的格式是jpg
print(img.size)                 # 输出照片的尺寸
print(img.height)               # 输出照片的长
print(img.width)                # 输出照片的宽

打开本地图片

from PIL import Image
im = Image.open("test.jpg")
#显示图像
im.show()

#保存图像
im.save('test1.jpg')

裁剪

from PIL import Image

#从一个图像中创建一个图像对象
im = Image.open('test.jpg')

#显示实际图像
im.show()

#left, upper, right, lowe
#裁剪
cropped = im.crop((1,2,300,300))

#显示裁剪后的部分
cropped.show()

#保存裁剪后的图片
cropped.save('test1.jpg')

创建一张新图片

mode:模式,通常用"RGB"这种模式
size:生成的图像大小
color:生成图像的颜色,默认为0,即黑色。

from PIL import Image

image = Image.new('RGB', (160, 90), (0, 0, 255))
image.show()

绘制矩形

from PIL import Image
im = Image.open('test.jpg')  # 创建图像实例
draw = ImageDraw.Draw(im) # 在上面画画
draw.rectangle([x1,y1,x2,y2],outline=(255,0,0),width=1) # [左上角x,左上角y,右下角x,右下角y]
im.show() # 显示图像

水平翻转的图像

from PIL import Image

# 打开一个已经存在的图像
im = Image.open("test.jpg")

# 做一个左右翻转的动作
hori_flippedImage = im .transpose(Image.FLIP_LEFT_RIGHT)

# 显示水平翻转后的图像
hori_flippedImage.show()

垂直翻转的图像

from PIL import Image

# 打开一个已经存在的图像
im = Image.open("test.jpg")

# 显示垂直翻转的图像
Vert_flippedImage = im.transpose(Image.FLIP_TOP_BOTTOM)
Vert_flippedImage.show()

调整图像大小

from PIL import Image

im = Image.open("test.jpg")

#使新图像的宽度和高度分别为原图像的一半
resized_im = im.resize((round(im.size[0]*0.5), round(im.size[1]*0.5))

#显示调整后的图像
resized_im.show()

#保存裁剪后的图片
resized_im.save('test1.jpg')

照片复制

from PIL import Image
img=Image.open('test.jpg')
img2=img.copy().show()  # 复制原照片并显示

图片添加文字

from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw


img=Image.open("图1.jpg")
draw = ImageDraw.Draw(img)
ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 20)
# 参数:位置,文本,字体,颜色
draw.text((30,30), u"测试文字",font = ft, fill = 'red')
ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 40)
draw.text((30,80), u"测试文字",font = ft, fill = 'green')
img.show() #显示
img.save("图2.png") # 保存

水印图片

from PIL import Image
from PIL import ImageDraw

img = Image.open("test.jpg")
logo = Image.open("logo.jpg")

img.paste(logo, (0, 0)) # 左上角

img1.show() #显示
img1.save("test1.jpg") # 保存

与Numpy一起使用

从Numpy数组创建图像
from PIL import Image
import numpy as np

#创建一个150×250像素的数组。
arr = np.zeros([150, 250, 3], dtype=np.uint8)

#用橙色填充数组的左半部分,蓝色填充数组的右半部分。
arr[:,:100] = [255, 128, 0]
arr[:,100:] = [0, 0, 255]

img = Image.fromarray(arr)

img.show()
img.save("test.jpg")
PIL图像和numpy数组相互转换
from PIL import Image
from numpy import array

#打开图像
img = Image.open('beach1.jpg')

#显示
img.show()

#将图像转换为numpy数组
img2arr = array(img)

#打印numpy数组
print(img2arr)

#将numpy数组转换回图像
arr2im = Image.fromarray(img2arr)

#显示图像
arr2im.show()

#保存
arr2im.save("test.jpg")
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大恩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值