使用PIL库为图片添加旋转文字时出现str无rotate属性报错如何解决
问题排查与解决方案
错误原因
AttributeError: 'str' object has no attribute 'rotate'报错的根本原因是:rotate()是PIL库Image对象的专属方法,你直接对字符串类型的文本变量text2调用该方法,字符串类型本身没有对应属性,自然会抛出异常。
实现逻辑修正
叠加旋转文字不能直接操作字符串,需要按照以下流程处理:
- 生成透明的临时文字画布
- 在临时画布上写入目标文字
- 旋转包含文字的临时画布
- 将旋转后的画布粘贴到原图的指定位置
修正后可运行代码
from PIL import Image, ImageDraw, ImageFont # 加载底图 base_img = Image.open('cupcake toppe.png').convert("RGBA") # 配置字体与文本参数 custom_font = ImageFont.truetype('arial.ttf', 15) target_text = "3345" # 计算文本实际宽高 _, _, text_width, text_height = ImageDraw.Draw(Image.new("RGBA", (0,0))).textbbox((0,0), target_text, font=custom_font) # 创建透明临时文字层 text_layer = Image.new("RGBA", (text_width, text_height), (255,255,255,0)) # 在临时层写入文字 text_drawer = ImageDraw.Draw(text_layer) text_drawer.text((0, 0), target_text, font=custom_font, fill=(0,0,0,255)) # 旋转文字层 rotated_text_layer = text_layer.rotate(17.5, expand=True) # 将旋转后的文字层粘贴到底图对应位置 base_img.paste(rotated_text_layer, (50, 15), mask=rotated_text_layer) # 展示结果 base_img = base_img.convert("RGB") base_img.show()
注意事项
- 临时文字层使用RGBA模式可以保证文字背景透明,粘贴到底图不会出现多余的白色背景块
- 粘贴时传入
mask=rotated_text_layer参数可以仅保留文字内容,过滤透明区域 - 调整
paste方法的第二个坐标参数即可修改文字在底图上的展示位置
内容的提问来源于stack exchange,提问作者Vikram J
相关产品推荐
相关产品推荐

