首页 > 编程语言 >python 图片转字符画报错:TypeError: __main__.get_char() argument after * must be an iterable, not int

python 图片转字符画报错:TypeError: __main__.get_char() argument after * must be an iterable, not int

时间:2022-09-23 19:58:47浏览次数:45  
标签:__ TypeError name get text char im file

直接上代码:
from PIL import Image

char = list('M3NB6Q#OC?7>!:–;. ')


def get_char(r, g, b, alpha=256):
if alpha == 0:
return ' '
grey = (2126 * r + 7152 * g + 722 * b) / 10000
char_idx = int((grey / (alpha + 1.0)) * len(char))
return char[char_idx]


def write_file(out_file_name, content):
with open(out_file_name, 'w') as f:
f.write(content)


def main(file_name="input.jpg", width=100, height=80, out_file_name='output.txt'):
text = ''
im = Image.open(file_name)
im = im.resize((width, height), Image.NEAREST)
for i in range(height):
for j in range(width):
g = im.getpixel((j, i))
#print('g:',g)
text += get_char(*g)
text += '\n'
print(text)
write_file(out_file_name, text)


if __name__ == '__main__':
main('dance.png')

执行后报错:TypeError: __main__.get_char() argument after * must be an iterable, not int

 

 

 

 

 


原因:getpixel用法,返回值会根据图片变化, :returns: The pixel value. If the image is a multi-layer image, this method returns a tuple. 如果是一个多层图片,返回一个元组,换句话说,如果不是,则返回可能是一个数值,非元组。
解决办法:需要转换一下,如下: txt += get_char(*im.convert('RGBA').getpixel((j,i))) 先换成RGBA的 multi-layer image
优化后代码如下:
def main(file_name="input.jpg", width=100, height=80, out_file_name='output.txt'):
text = ''
im = Image.open(file_name)
im = im.resize((width, height), Image.NEAREST)
for i in range(height):
for j in range(width):
g = im.convert('RGBA').getpixel((j, i))
#print('g:',g)
text += get_char(*g)
text += '\n'
print(text)
write_file(out_file_name, text)


标签:__,TypeError,name,get,text,char,im,file
From: https://www.cnblogs.com/yimobaihe/p/16724027.html

相关文章

  • 11th 2022/7/11 模拟赛总结6
    这次可能还行吧,200pts,还进行了核酸,rank7,还凑合这次对于暴力是真的没有耐心,T3T4暴力打炸,全0但是。。。T1T2全A了,还行吧,T2是最小生成树,好久没打了,手推了0.5h,拿到100分,而T1......
  • 10th 2022/7/8 模拟赛总结5
    这次还行,但大家分数相差也并不大,自己是几乎尽全力,(除T4没打暴力以外)嗯,发现了许多提升空间,如DP,虽然能在知道是DP的情况下推出来一点点,但是对DP的应用以及理解还是差了很多,......
  • 9th 2022/7/7 模拟赛总结4
    这次仍然打得不算好,但这次却与上次性质不同了上次是知识面欠缺,而这次却是比赛的策略问题这是比赛,不是做题因为是做题的思维,导致了一场悲剧,即见到自己能打的就开打这一......
  • 12th 2022/7/11 RMQ专题复习
    分为三类吧线段树这种数据结构挺有用的,使用范围是时间,看着办嘛,\(O(n\logn)\)的算法,修改加入查询都是\(O(\logn)\)然后建树\(O(n\logn)\)看着办大概思路就是将一个......
  • JAVA + LR实现apache流媒体的性能测试
    一个视频点播系统,使用apache实现的流媒体服务器。其实准确的说叫做伪流(HTTPPseudo-Streaming),基本原理和概念自行了解吧。让我简单的描述就是仍然是HTTP下载,播放器播放本地......
  • 概要3
    今日内容回顾pycharm软件下载安装及使用1、简介 pycharm是一种pythonIDE(IntegretedDevelopmentEnvirnment集成开发环境),带有一套可以帮助用户在使用python语言......
  • 038.IDEA中的Debug模式下各快捷键的使用
                     ......
  • Vuex 学习笔记
    组件之间共享数据的方式小范围父向子:v-bind属性绑定简写:子向父:v-on事件绑定简写@兄弟组件之间共享数据:EventBusVuex是实现组件全局状态(数据)管理的一种机制,可......
  • 【2022-09-23】DRF入门到入土(一)
    drf入门规范一、web应用模式web应用模式分为两种,一种是前后端不分离,一种是前后端分离前后端不分离前后端分离二、API接口为了在团队内部形成共识、防止......
  • Vue3与Vue2的区别(面试题)
    模板指令1、v-if、v-for优先级区别3.0依然不建议写在一个元素上但是依然可以同时绑定Vue2:当在同一个元素上使用v-if时,将优先v-forVue3:v-if优先,再v-for 2、v-model......