广告位联系
返回顶部
分享到

Python+PIL实现批量在图片上写上自定义文本

PowerShell 来源:互联网 作者:佚名 发布时间:2024-11-29 21:07:22 人浏览
摘要

1、库的介绍 Pillow 是一个 Python 的图像处理库,它是 Python Imaging Library (PIL) 的一个分支,并且增加了更多的功能。Pillow 库使得加载、操作和保存多种图像文件格式变得非常简单。它支持大量的

1、库的介绍

Pillow 是一个 Python 的图像处理库,它是 Python Imaging Library (PIL) 的一个分支,并且增加了更多的功能。Pillow 库使得加载、操作和保存多种图像文件格式变得非常简单。它支持大量的图像格式,包括常见的如 JPEG、PNG、BMP、GIF、PPM、TIFF 和一些更少见的格式。

主要特性

图像处理: Pillow 提供了一系列的方法来对图像进行基本的操作,例如裁剪、旋转、缩放、颜色转换等。

图像过滤器: 包括模糊、轮廓检测、边缘增强等滤镜效果。

文本和图形绘制: 可以在图片上添加文字或绘制简单的图形。

图像序列处理: 支持处理 GIF 或其他格式的多帧图像。

扩展性: 用户可以编写自己的图像解码器或格式处理器。

色彩模式支持: 支持多种色彩模式,比如 RGB、RGBA、CMYK 等。

2、库的安装

用途 安装
Pliiow 处理图片 pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple/
natsort 自然排序 pip install natsort -i https://pypi.tuna.tsinghua.edu.cn/simple/
os 获取绝对路径 内置库无需安装

3、核心代码

自然排序

1

2

# 获取所有图片文件 使用自然排序

image_files = natsort.natsorted(os.listdir(input_folder))

创建自定义文本(包括样式)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

# 创建绘图对象

draw = ImageDraw.Draw(img)

 

 # 设置字体

 font_size = max(30, int(img_width * 0.03))

 font = ImageFont.truetype("simhei.ttf", font_size)

 

 # 文本内容和颜色

 text = f"编号:{index + 1}"

 text_color = (0, 0, 0)  # 黑色字体

 shadow_color = (0, 0, 0)  # 黑色阴影

 

 # 获取文本尺寸

 bbox = draw.textbbox((0, 0), text, font=font)

 text_width = bbox[2] - bbox[0]

 text_height = bbox[3] - bbox[1]

 

 # 计算文本位置

 x = img_width - text_width - 190

 y = img_height - text_height - 30

 

 # 绘制文本阴影

 draw.text((x + 1, y + 1), text, font=font, fill=shadow_color)

 

 # 绘制文本

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

4、测试图片创建脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

# -*- coding: UTF-8 -*-

'''

@Project :测试

@File    :创建随机图片.py

@IDE     :PyCharm

@Author  :一晌小贪欢(278865463@qq.com)

@Date    :2024/9/27 下午11:04

'''

 

import random

import os

from PIL import Image, ImageFont, ImageDraw

 

# 图片命名为 name_list 中的随机一个,如张三_1.png,张三_2.png

name_list = ['张三', '李四', '王五', '赵六', '田七']

 

try:

    os.mkdir('图片/图片')

except FileExistsError:

    print('文件夹已存在')

 

# 清空文件夹 图片

for i in os.listdir('图片/图片'):

    os.remove('./图片/' + i)

 

# 创建50张随机图片

for i in range(50):

    width, height = 300, 300

    img = Image.new('RGB', (width, height), color=(255, 255, 255))

    draw = ImageDraw.Draw(img)

 

    # 尝试加载字体

    try:

        font = ImageFont.truetype('C:/Windows/Fonts/simhei.ttf', 65)

    except IOError:

        print("Font not found. Using default font.")

        font = ImageFont.load_default()

 

    random_name = random.choice(name_list)

    text = f"{random_name}_{i}"

 

    # 计算文本的边界框

    bbox = draw.textbbox((0, 0), text, font=font)

    text_width = bbox[2] - bbox[0]

    text_height = bbox[3] - bbox[1]

 

    # 计算文本的起始位置

    x = (width - text_width) / 2

    y = (height - text_height) / 2

 

    # 在图片上绘制文本

    draw.text((x, y), text, fill=(0, 100, 255), font=font)

    img.save(f'./图片/{random_name}_{i}.png')

    print(f"{random_name}_{i}.png")

5、完整代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

from PIL import Image, ImageDraw, ImageFont

import natsort

import os

 

def add_number_to_images(input_folder, output_folder):

    """

    在指定文件夹内的每张图片右下角添加编号

    :param input_folder: 输入文件夹路径

    :param output_folder: 输出文件夹路径

    """

    if not os.path.exists(output_folder):

        os.makedirs(output_folder)

 

    # 获取所有图片文件 使用自然排序

    image_files = natsort.natsorted(os.listdir(input_folder))

 

 

    for index, file_name in enumerate(image_files):

        # 打开图片

        img_path = os.path.join(input_folder, file_name)

        img = Image.open(img_path)

 

        # 获取图片大小

        img_width, img_height = img.size

 

        # 创建绘图对象

        draw = ImageDraw.Draw(img)

 

        # 设置字体

        font_size = max(30, int(img_width * 0.03))

        font = ImageFont.truetype("simhei.ttf", font_size)

 

        # 文本内容和颜色

        text = f"编号:{index + 1}"

        text_color = (0, 0, 0)  # 黑色字体

        shadow_color = (0, 0, 0)  # 黑色阴影

 

        # 获取文本尺寸

        bbox = draw.textbbox((0, 0), text, font=font)

        text_width = bbox[2] - bbox[0]

        text_height = bbox[3] - bbox[1]

 

        # 计算文本位置

        x = img_width - text_width - 190

        y = img_height - text_height - 30

 

        # 绘制文本阴影

        draw.text((x + 1, y + 1), text, font=font, fill=shadow_color)

 

        # 绘制文本

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

 

        # 保存处理后的图片

        output_path = os.path.join(output_folder, file_name)

        img.save(output_path)

 

    print(f"所有图片已处理并保存到:{output_folder}")

 

if __name__ == "__main__":

    # 输入和输出文件夹路径

    input_dir = "图片"  # 输入图片的文件夹

    output_dir = "处理后图片"  # 处理后图片的保存文件夹

    if not os.path.exists(input_dir):

        os.mkdir(output_dir)

 

    add_number_to_images(input_dir, output_dir)

效果图


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python+PIL实现批量在图片上写上自定义文本

    Python+PIL实现批量在图片上写上自定义文本
    1、库的介绍 Pillow 是一个 Python 的图像处理库,它是 Python Imaging Library (PIL) 的一个分支,并且增加了更多的功能。Pillow 库使得加载、操作和
  • 怎么利用PowerShell提取wps表格中嵌入的图片
    针对Excel下打开表格图片显示 #NAME?编辑栏显示为 =@_xlfn.DISPIMG( 样公式的问题,一般需要在 wps 程序下,Ctrl+F 查找范围选值,输入 =DISPIMG 全
  • 脚本实现SSL证书到期监控介绍

    脚本实现SSL证书到期监控介绍
    1)准备工作 创建一个企业微信账号,并创建一个组,在组里面配置企业微信提供的机器人。将机器人提供的 WebHook 地址保存。 2)编写脚本
  • 远程脚本的详细介绍
    实际上,我们自己也曾用过这种方法。这在以前一般称为远程脚本(remote scripting),很多人认为这只是一种修修补补。不过,这确实提供了
  • CS1.5,cs1.6中使用包含文件夹的脚本的图文教程

    CS1.5,cs1.6中使用包含文件夹的脚本的图文教程
    我们继续教大家如何使用含有文件夹的脚本比如你下载的是这样的脚本文件 或者 一,自动安装脚本文件 我们网站制作了一个.exe安装文件的
  • 使用powershell创建虚拟机的介绍

    使用powershell创建虚拟机的介绍
    在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作。由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计