python学习:pillow/水印/改变大小

一个与图片处理相关的库
更新于: 2024-03-28 19:44:37

安装

# pillow
pip install -U Pillow
# resize
pip install python-resize-image

case1: 添加图片水印

  • 主图
  • 水印图(样式,旋转,透明度都调好了)
  • 给一个位置
  • 组合出目标图/或者 buffer

推荐使用自己的库 jsw-pillow 来完成日常的水印添加工作。

pip install jsw-pillow
Watermark.single(
    source='./__tests__/assets/test.png',
    text='js.work',
    font_size=50,
    angle=45,
    position='center',
    color=(0, 255, 0, int(255 * 0.5)),
)

case2: resize

改变大小的方法
pip install python-resize-image

case3 paste

用于将一张图,paste 到另一张图上; https://note.nkmk.me/en/python-pillow-paste/

正常情况下 composite 的逻辑,应该是用 composite API,不过,pillow 限制了2张图,必须 size 一样,才可以 composite,所以,一般这种水印的 composite 场景, 我会使用 paste API 完成。

case 将图片转化为 pdf

其实就是扫瞄的功能,因为手边没有扫瞄仪器,所以,用这段代码代替。

from PIL import Image

imgs = [
    'hetong/WechatIMG228.jpeg',
    'hetong/WechatIMG229.jpeg',
    'hetong/WechatIMG230.jpeg',
    'hetong/WechatIMG231.jpeg',
    'hetong/WechatIMG232.jpeg',
    'hetong/WechatIMG233.jpeg',
]

# 注意“L”,是将图片转化为黑白的, “RGB” 则为彩色
def export_pdf(imgs, pdf_name):
    img = Image.open(imgs[0]).convert('L')
    img_list = [img]
    for i in range(1, len(imgs)):
        img = Image.open(imgs[i]).convert('L')
        img_list.append(img)
    img_list[0].save(pdf_name, "PDF", resolution=100.0,
                     save_all=True, append_images=img_list[1:])


if __name__ == '__main__':
    export_pdf(imgs, 'hetong/hetong.pdf')

常用功能 cheatsheet 

功能代码
读取远程图片1
from PIL import Image
import requests

im = Image.open(requests.get(url, stream=True).raw)
读取远程图片2
from PIL import Image
import requests
from io import BytesIO

response = requests.get(url)
img = Image.open(BytesIO(response.content))
使用字体
from PIL import Image, ImageDraw, ImageFont

im = Image.new('RGBA', size=(200, 200), color=(255, 255, 255))
draw = ImageDraw.Draw(im)
font = ImageFont.truetype('./qnhghp.ttf', size=16)
draw.text(xy=(10, 10), text='可爱的水印', fill=(255, 0, 0), font=font)

# 查看原图片
im.show()
字体的 bound 信息
_, _, text_width, text_height = draw.textbbox((0, 0), text, font=font)
缩略图
import sys
from PIL import Image
from PIL.Image import Resampling

im = Image.open('02.png')
im.thumbnail([sys.maxsize, 400], Resampling.LANCZOS)
im.save('02_thumb.png')
调整大小
from PIL import Image
from resizeimage import resizeimage

# pip install python-resize-image

with open('test-image.jpeg', 'r+b') as f:
    with Image.open(f) as image:
        cover = resizeimage.resize_cover(image, [200, 100])
        cover.save('test-image-cover.jpeg', image.format)

参考