使用Python PIL修改图像像素时遇“image index out of range”错误求助
解决PIL修改图像像素时的"out of range"错误
嘿,我一眼就发现你代码里的问题啦——你把图像宽高的循环范围搞反了!
问题根源
PIL中Image.size返回的是**(宽度, 高度)**的元组,也就是说:
- x轴(横向)的像素范围是
0到largeur-1(宽度值减1) - y轴(纵向)的像素范围是
0到longueur-1(高度值减1)
但你写的循环里,让y遍历range(largeur)(宽度的范围),x遍历range(longueur)(高度的范围),这就导致当y的取值超过图像实际高度时,访问(x,y)这个坐标就会触发"out of range"错误——因为这个像素点根本不存在!
另外还有个小细节:最后一行的picture_2.show少了括号,应该写成picture_2.show(),不然不会执行显示图像的操作。
修正后的代码
from PIL import Image picture_1 = Image.open("test.jpg") largeur, longueur = picture_1.size # largeur=宽度(x轴范围),longueur=高度(y轴范围) print(largeur,"*",longueur) picture_2 = Image.new("RGB", (largeur, longueur)) # 修正循环:y遍历高度范围,x遍历宽度范围 for y in range(longueur) : for x in range(largeur) : # 如果你需要基于原图像像素修改,可以取消下面注释: # r, v, b = picture_1.getpixel((x,y)) # 目前你用的是固定值,保留即可 r = 154 ; v = 152 ; b = 100 picture_2.putpixel((x,y), (r, v, b)) picture_2.save("test2.jpg") picture_2.show() # 补上缺失的括号
这样修改后,循环就会遍历图像的所有合法像素坐标,不会再出现范围错误啦~
内容的提问来源于stack exchange,提问作者Louise D.
相关产品推荐
相关产品推荐

