开发者社区> 问答> 正文

python pillow做字符图出现问题搞不懂?报错

首先贴上我的全部代码,是从实验楼学习的。第一步只用了PIL模块,已经成功做出图片,然后加上argparse模块时,有些问题我就无法理解,不知道为什么会出错。

from PIL import Image import argparse

#命令行参数输入 parser = argparse.ArgumentParser() parser.add_argument('file') #输入文件 parser.add_argument('-o','--output') #输出文件 parser.add_argument('--width',type = int,default = 80) parser.add_argument('--hight',type = int,default = 80)

#获取参数 args=parser.parse_args() IMG = args.file WIDTH = args.width HIGHT = args.hight OUTPUT =args.output

ascii_char = list("$&#@{}/|i!lI;:,"^`'. ")

将灰度映射在字符上

def get_char(r,b,g,alpha = 256): if alpha == 0: return ' ' length = len(ascii_char) gray = int(0.2126r+0.7152g+0.0722*b) unit = (256.0+1)/length return ascii_char[int(gray/unit)]

if name=='main':

img = Image.open(IMG)
img = img.resize((60,140),Image.NEAREST)

txt = ""


for i in range(HIGHT):
    for j in range(WIDTH):
        a=(j,i)
        txt +=get_char(*img.getpixel(j,i))
    txt +='\n'
print(txt)

#字符输出到文件
if OUTPUT:
    with open(OUTPUT,'w') as f :
        f.write(txt)
else:
    with open("output.txt",'w') as f:
        f.write(txt)</pre> 
1.第一个问题是:
for i in range(HIGHT):
        for j in range(WIDTH):
            txt +=get_char(*img.getpixel(j,i))

它Traceback (most recent call last):
  File "picutrechange.py", line 42, in <module>
    txt +=get_char(*img.getpixel(j,i))
TypeError: getpixel() takes 2 positional arguments but 3 were given

它说我getpixel()带入了3个数,我弄不清楚多出来的一个数是哪里的。

2.当我只用PIL模块做成功的时候是这样的


for i in range(HIGHT):
        for j in range(WIDTH):
            a=(j,i)
            txt +=get_char(*img.getpixel(a))
        txt +='\n'
    print(txt)
只用一个模块时是成功了,但是加上argparse模块并且在Cmd运行时它就报错了Traceback (most recent call last):
  File "picutrechange.py", line 42, in <module>
    txt +=get_char(*img.getpixel(a))
  File "G:\software#\install#\install#python\lib\site-packages\PIL\Image.py", line 1213, in getpixel
    return self.im.getpixel(xy)
IndexError: image index out of range

根本就想不明白image是哪里出现了问题,对这个模块不够熟练,请各位指导一下,谢谢。



展开
收起
爱吃鱼的程序员 2020-06-09 15:02:35 1171 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    txt+=get_char(*img.getpixel(j,i))

    改为

    txt+=get_char(*img.getpixel((j,i)))





    2020-06-09 15:02:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载