循环仅导出单个字符图片问题求助:为何只保存Z而未保存A-Y?
问题原因分析
你猜的没错,确实是循环遍历了所有字符,但每次都覆盖了同一个文件,最终只留下最后一个字符Z的图片。
问题出在文件名的定义位置:
- 你把
filename = savepath+str(i)+'.png'放在了循环外面,这行代码只会执行一次,生成的文件名是固定的(如果循环前i的值刚好是Z,那文件名就是Z.png)。 - 循环里每次生成不同字符的图片,但都用同一个文件名保存,后面的图片会直接覆盖前面的,所以最后只剩最后一次循环生成的Z的图片。
修复代码
把文件名的生成逻辑移到循环内部,让每次循环都对应一个唯一的文件名:
import string from PIL import Image, ImageDraw, ImageFont # 假设savepath和font已经提前定义好 characters = string.ascii_uppercase for i in characters: # 把文件名生成移到循环内,每个字符对应一个唯一文件 filename = savepath + str(i) + '.png' # Settings W, H = (100, 100) # Image image = Image.new("RGB", (W, H), "white") draw = ImageDraw.Draw(image) offset_w, offset_h = font.getoffset(i) w, h = draw.textsize(i, font=font) pos = ((W - w - offset_w)/2, (H - h - offset_h)/2) # Draw draw.text(pos, i, "green", font=font) # Save PNG File image.save(filename, "PNG", quality=95)
这样每次循环都会生成对应字符的文件名(A.png、B.png...Z.png),就不会出现覆盖的问题了。
内容的提问来源于stack exchange,提问作者kellelle
相关产品推荐
相关产品推荐

