python-使用pillow给JPG图片增加文字

电脑环境

window :win10 x64

python:Python 3.11.2 (tags/v3.11.2:878ead1, Feb  7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32

编译器:vscode 1.85.0

python-库Pillow==9.5.0 (必须这个版本,最新版10.1.0在ImageDraw和ImageFont的函数和9.5的有差异,当前gpt给的代码均是以pillow9.5为例的)

代码

使用gpt3.5生产代码

#!/usr/bin/env python3


from PIL import Image, ImageDraw, ImageFont
import os

def add_text_to_images(directory, text=None, font_path='arial.ttf', max_font_size=100, color=(255, 0, 0)):
    # 加载字体
    font = ImageFont.truetype(font_path, max_font_size)


    for filename in os.listdir(directory):
        if filename.endswith(".jpg"):
            #通过文件名获取 输入文字,文件名: IMG_20210808_093735.jpg
            # 去除文件扩展名
            base_name = os.path.splitext(filename)[0]
            # 使用"_"分割文件名
            file_name_parts = base_name.split("_")
            text = file_name_parts[1]

            img = Image.open(os.path.join(directory, filename))

            draw = ImageDraw.Draw(img)
            # 获取图片的宽度和高度
            width, height = img.size
            # 根据图片的大小动态调整文字的大小
            font_size = min(width, height) // 20
            font = ImageFont.truetype(font_path, font_size)

            # 计算文字的位置
            text_width, text_height = font.getsize(text)
            x = (width - text_width-80) 
            y = (height - text_height-80) 

            draw.text((x, y), text, fill=color, font=font)

            # 保存图片时不降低质量
            img.save(os.path.join(directory, filename), "JPEG", quality=100)

# 使用方法
add_text_to_images('F:\相片\Camera')



代码报错情况1

pillow函数报错

#   AttributeError: ‘ImageDraw‘ object has no attribute ‘textsize‘

主要原因就是最新的Pillow 10.0.0 版本已经删除了函数,最简单的方式就是先卸载最新的Pillow,在安装Pillow 9.5.0版本的就好了。
卸载 Pillow

pip uninstall Pillow

安装旧版本的 Pillow

pip install Pillow==9.5.0
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值