Pillow¶
Python 内置的图像处理库:PIL(Python Imaging Library),仅支持 2.x,而 Pillow 是在其基础上开发的,支持 3.x 的版本,且增加了很多新特性
安装:pip install pillow
画布¶
from PIL import Image
# 创建一个画布
im = Image.open(path) # 从文件读取
im = Image.new("RGB", (w, h), color) # 新建
im = Image.alpha_composite(im1, im2) # 合并两张图,必须均为RGBA模式,且尺寸相同
# 属性
"""
im.size 图像尺寸
im.width 宽度
im.height 高度
im.mode 模式,比如RGB
im.format 来源,新建的图片来源为None
im.format_description 更详细的来源
"""
# 方法
"""
im.copy() 复制
im.paste(logo, 坐标) 粘贴
im.paste(logo, 坐标,logo) 粘贴,logo外的部分透明
im.crop() 裁剪一块区域
im.resize() 调整大小
im.rotate(45) 逆时针旋转,旋转后得到一个新的对象,原始对象不变
im.transpose() 镜像翻转
im.transpose(Image.FLIP_LEFT_RIGHT) 水平翻转
im.transpose(Image.FLIP_TOP_BOTTOM) 垂直翻转
im.getpixel(坐标) 获取单像素的RGBA值
im.putpixel(坐标,颜色) 设置单像素颜色
im.save() 保存
im.show() 使用默认程序打开图像
"""
画笔¶
from PIL import ImageDraw
# 创建一个画笔
draw = ImageDraw.Draw(im, mode=None))
"""
xy 指起点和终点坐标,可以表示为[(x0, y0), (x1, y1)],或者[x0, y0, x1, y1]
fill 指填充颜色
width 指线宽,像素为单位
joint 类型
"""
draw.point(xy, fill=None) # 画点
draw.line(xy, fill=None, width=0, joint=None) # 画线
draw.rectangle(xy, fill, outline) # 矩形
draw.polygon(xy, fill, outline) # 多边形
draw.ellipse((x-r, y-r, x+r, y+r)) # 椭圆,r为半径
draw.arc() # 圆弧
# 绘制文本
from PIL import ImageFont
draw.text(xy, text, fill=None, font=None)
font = ImageFont.truetype("statics/font/NotoSans-Medium.ttf", text_size) # 思源黑体,开源,不支持中文(支持中文的字体包比较大)
"""
xy 文本左上角
text 要绘制的文本
fill 文本颜色
font ImageFont实例
direction 文字方向,ltr(从左到右),rtl(从右到左),ttb(从上到下)
"""
保存为 Base64 格式¶
def generate_data_url(im, img_format):
output_buffer = io.BytesIO()
im.save(output_buffer, "JPEG")
bytes_data = output_buffer.getvalue()
# 把字节流编码为base64字符串
base64_str = base64.b64encode(bytes_data)
# 再把base64字符串解码为base64字节流
base64_bytes = base64_str.decode('ascii')
# 拼接data url
data_url = "data:image/{};base64,".format(img_format) + base64_bytes
return data_url