Python PIL像素提取脚本:如何在文件名中使用变量?
解决Python脚本中文件名嵌入变量的问题
核心问题与修正方案
你需要将循环变量i、j嵌入保存的文件名中,当前写法"new\{i, j}.png"不符合Python字符串格式化规则,同时代码存在几处逻辑错误,以下是修正后的完整代码及关键说明:
修正后的完整代码
# Importing Image from PIL package from PIL import Image import os # 确保保存目录存在,避免因目录缺失报错 os.makedirs("new", exist_ok=True) # 创建图片对象,用原始字符串避免路径转义问题 im = Image.open(r"C:\Users\joeco\Desktop\Python-test-image\image.jpg") px = im.load() # 获取图片宽高 imageSizeW, imageSizeH = im.size # 遍历所有像素坐标(从0开始,覆盖全部像素) for i in range(imageSizeW): for j in range(imageSizeH): current_pixel = px[i, j] # 过滤白色像素,保存其他颜色的单像素图片 if current_pixel != (255, 255, 255): img = Image.new('RGB', (1, 1), color=current_pixel) # 用f-string嵌入变量生成文件名,Python3.6+推荐 img.save(f"new/{i}_{j}.png") # 兼容低版本Python可改用以下两种方式: # img.save("new/{}_{}.png".format(i, j)) # img.save("new/%d_%d.png" % (i, j))
关键修改说明
- 文件名变量嵌入:
推荐使用f-string(Python3.6及以上支持),直接在字符串中用{变量名}嵌入,写法简洁直观;低版本Python可选择str.format()或%格式化方式,效果一致。 - 路径与目录处理:图片路径添加
r前缀转为原始字符串,避免转义字符报错;新增目录检查代码,确保new目录存在。 - 循环范围修正:将循环起始值改为0,因为图片像素坐标从(0,0)开始,原代码从1开始会跳过左上角像素。
- 像素判断修正:原代码错误地判断
px对象本身,改为获取当前坐标的像素值current_pixel = px[i,j]后再做对比。
内容的提问来源于stack exchange,提问作者devtoform
相关产品推荐
相关产品推荐

