[Python] 将文字转化到图片上显示

本文介绍了如何使用Python3的PIL库进行文字转图片操作,包括文字自动换行、设置字体、调整图片尺寸以及保存为本地图片。代码示例详细展示了如何创建和自定义图片内容。
部署运行你感兴趣的模型镜像

一、概要:

本文基于Python 3,完成将文字转化为图片的操作。其中包含对文字的自动换行、转化文字到图片、将图片存储在本地。

二、代码示例:

这里使用的是PIL库,它可以高效地生成图片并自定义图片中的文字内容。在使用前,还需准备一个.ttf字体库,本例中使用的msyh.ttf为微软雅黑体,字体库可自行从网上查找下载。以下为代码示例:

from PIL import Image, ImageFont, ImageDraw
import os
import textwrap

def w2p(text, cutline=True):
	# 文字自动换行
	if cutline:
		sptext = text.split("\n")
		hlen = len(sptext)
		for i in range(hlen):
			sptext[i] = "\n".join(textwrap.wrap(sptext[i],width=35))
		text = "\n".join(sptext)

	# 获取文字列表的最大字符数量
	max_len = 0
	for item in text.split("\n"):
		if len(item) > max_len:
			max_len = len(item)

	# 转换文字为图片并保存为图片
	h = 26 * len(text.split("\n")) + 10
	w = int(max_len * 19.5 + 10)
	im = Image.new("RGB", (w, h), (255, 255, 255))
	dr = ImageDraw.Draw(im)
	fpath = os.getcwd() + "/msyh.ttf"
	font = ImageFont.truetype(fpath, 20)
	dr.text((5, 5), text, font=font, fill="#000000")

	# 存储图片到本地路径/w2p.png
	save_path = os.getcwd()
	if (os.path.exists(save_path)):
		save_path = save_path + "/w2p.png"
	else:
		os.mkdir(save_path)
		save_path = save_path + "/w2p.png"
	im.save(save_path)

	return save_path

上述代码中:
1、文字的自动换行可自行控制每行文字数的上限,由textwrap.wrap()的参数width控制。
2、生成图片时,通过Image.new()可指定图片色域、长宽、底色;通过ImageFont.truetype()指定字体和字号大小;dr.text()中,第一个参数是用于指定第一个文字在左上角的坐标,提供一定长度的边缘空白,第二个参数为文字内容,font为指定的字体格式,fill为文本颜色。
3、图片的存储格式一般用png格式。

需要注意的是,图片的长宽需要自行根据字体的实际大小调整,以保证文字能完全显示出来,若图片长宽不足,则文字会显示不全。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Python中,实现图片显示文字主要有基于OpenCV库和PIL(Python Imaging Library)库这两种方法。 OpenCV库可以将英文字显示图片,但不能显示文字符,且显示出来的文字位置不太好控制,同时该库没有使用自定义字体文件的函数,意味着不能使用自己的字体[^1][^2]。 而采用PIL库可以实现中文字符在图片上的显示,以下是使用PIL库实现图片显示中文文本的示例代码: ```python # -*-coding:utf-8-*- # date:2024-11 # Author: DataBall - XIAN # Function: 图像上显示中文文本 from PIL import Image, ImageDraw, ImageFont import numpy as np import cv2 # 创建空白图像 width, height = 800, 300 image = Image.new('RGB', (width, height), color='gray') # 创建画布 draw = ImageDraw.Draw(image) font_path = r"ckpt\SimHei.ttf" # 加载中文字体,替换为系统上中文字体的路径 font_size = 30 # 字体大小 font = ImageFont.truetype(font_path, font_size) # 绘制中文文字 text = "数据球,助力快速掌握数据集的信息和使用方式!" text_position = (60, 100) # 文本的位置 text_color = "red" # 文本颜色 draw.text(text_position, text, font=font, fill=text_color) img = np.array(image) # PIL Image 转 numpy img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转化 RGB 通道 cv2.namedWindow("img", 1) cv2.imshow("img", img) cv2.waitKey(0) ``` 上述代码通过PIL库在空白图像上绘制了中文文本,并使用OpenCV显示图像[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值