Python文字云生成:用“我爱你”拼出爱人照片的完整教程

江屿
江屿
发布时间:2026-10-13 | 5人浏览过
原创

本文详细介绍如何使用Python将普通照片转化为由“我爱你”等文字组成的艺术图片。通过OpenCV读取像素信息,结合PIL库在白色背景上逐块填充指定文字,并映射原图颜色值,最终生成独特的文字云效果。教程涵盖环境准备、核心代码逻辑及完整实现步骤,适合Python初学者尝试创意编程。

Python文字云生成:用“我爱你”拼出爱人照片的完整教程

摘要:每逢情人节或七夕节,许多人都面临一个经典难题——如何为伴侣准备一份别出心裁的节日惊喜。本文介绍一种新颖的表白方式:利用文字排列,将“我爱你”等字样组合成爱人的肖像图像。

每逢情人节或七夕节,许多人都面临一个经典难题——如何为伴侣准备一份别出心裁的节日惊喜。

若选择送花,朋友圈中满是类似祝福,伴侣可能评价:“缺乏创意!”;

若赠送实物礼物,若不合心意,伴侣可能表示:“你不懂我!”;

若选择逛街购物,面对空空的钱包,只能将此想法搁置……

今天,分享一种独特的表白方式——利用文字排列,将“我爱你”等字样组合成爱人的肖像图像!

成品展示图!

若看不清细节,可放大查看。

想要制作此类图片吗?现在开始操作。

准备工作与依赖库

一. 准备工作

伴侣的照片1张(建议清晰可爱)。

Python环境(本文使用Python 3.7)。

所需依赖库。

cv2:用于读取图片文件。

PIL:用于生成新图片。

性能较好的计算机。

(若未接触过Python,或不愿/无法配置环境、安装cv2和PIL库,或电脑性能不足,强烈建议使用华为云ModelArts进行开发,以直接解决环境配置和性能问题。)

基本实现思路

二. 基本思路 实现该效果需先获取一张照片,提取其像素信息,然后将这些颜色信息赋给由文字填充的新图片,即可得到如上图所示的效果。

接下来开始具体操作。

详细操作流程

三. 操作流程

1. 首先导入所需库(作用已在上述介绍中说明)。

from PIL import Image, ImageDraw, ImageFont

2. 声明绘图函数。

该函数包含两个参数:原图片路径和要写入的文字字符串。

def draw(pic, draw_text):

3. 读取图片数据。

使用cv2中的imread方法读取图片信息,

使用PIL中的Image方法创建新图片,尺寸与原图一致,背景设为白色。

blank = Image.new("RGB", [img.shape[1], img.shape[0]], "white") drawObj = ImageDraw.Draw(blank) # 告知程序,接下来将在该图上绘制文字。

4. 声明绘图相关参数(经多次试验得出的最佳数值)。

m = 9 # 字体大小 font_path = '你使用字体的位置' # 字体文件路径 font = ImageFont.truetype(font_path, size=m) # 将字体信息赋值给font变量,供后续使用。

5. 最关键步骤:写入文字并根据源图片颜色进行填充。

通过两层for循环,依次定位每个文字所在的色块(中间间隔n是因为文字比像素块大得多,无法完全按每个像素位置和色彩排布)。

使用text()方法填入带色彩的文字,各参数含义如下:

[j, i] -- 坐标位置。

draw_text[int(j / n) % len(draw_text)] -- 确定当前应写入的文字(例如“我爱你”中的第几个字)。

fill=(img[i][j][2], img[i][j][1], img[i][j][0]) -- 代表源图片对应位置的颜色(三个值分别代表RGB颜色分量)。

for i in range(0, img.shape[0], n): for j in range(0, img.shape[1], n): drawObj.text( [j, i], draw_text[int(j / n) % len(draw_text)], fill=(img[i][j][2], img[i][j][1], img[i][j][0]), font=font ) # 按句子顺序填充文字。

6. 写入完成后,导出图片。

7. 调用封装好的函数。

输入图片路径和目标文字,运行程序,一张独一无二的表白图即生成。

draw('1.jpg', "我爱你")

附上完整代码(记得将字体路径修改为你电脑上的实际路径)。


from PIL
import Image, ImageDraw, ImageFont
def draw(pic, draw_text):
	img = cv2.imread(pic)
blank = Image.new("RGB", [img.shape[1],
	img.shape[0]
], "white")
drawObj = ImageDraw.Draw(blank)
n = 10
m = 9
font = ImageFont.truetype(font_path,
	size = m)
for i in range(0, img.shape[0], n):
	for j in range(0, img.shape[1], n):
	drawObj.text(
		[j, i],
		draw_text[int(j / n) % len(draw_text)],
		fill = (img[i][j][2], img[i][j][1],
			img[i][j][0]),
		font = font
	)
blank.save('img_' + pic)
draw('1.jpg', "我爱你")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表