python 图片在线转字符画预览
关于python图片转字符画,相信大家都不陌生,经常出现在 n个超有趣的python项目中。
今天我也来实践这个有趣的项目,更进一步的是把这个功能做成一个在线的网站,直接上传图片生成字符画,在线预览可以让更多的人来体验。
体验网址:https://www.manjiexiang.cn/blog/post_img
举个栗子,就是这是一张图片
经过转换成的字符画是这样的,这个txt的文件
代码部分:
使用PIL处理图片,resize方法转成指定宽高
from PIL import Image im = Image.open("qq.png") im = im.resize((width, height), Image.NEAREST)
像素转字符方法,将r,b,g转化为灰度值,然后根据灰度值的大小确定所选字符在ascii_char中的位置。
def get_char(r, g, b, alpha=256): ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") if alpha == 0: return ' ' length = len(ascii_char) gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) unit = (256.0 + 1) / length return ascii_char[int(gray / unit)]
处理图片,遍历图片中的每一个像素,依次调用get_char方法即可得到每一个像素对应的字符,然后将这些字符组合起来即可得到所需的字符画了,输出到txt文件。
def draw(): im = Image.open("qq.png") im = im.resize((width, height), Image.NEAREST) txt = "" for i in range(height): for j in range(width): txt += get_char(*im.getpixel((j, i))) txt += '\n' with open("qq.txt", 'w') as f: f.write(txt)
至此,生成字符画的脚本完成了。
接下来就是运用到网站项目中,区别是图片是上传的,不是本地的路径,这里采用的是django的项目,图片上传到项目里的路径
media_root = os.path.join(settings.BASE_DIR, 'upload/')
原本想将生成的txt文件下载下来的,发现下载的txt文件里面字符画错乱了,索性就重定向进行浏览,效果一样。
设置的宽高可以修改生成字符画的大小,即上面的width、height
网站地址:
https://www.manjiexiang.cn/blog/post_img
欢迎大家使用
脚本github地址:https://github.com/taixiang/py_draw
欢迎关注我的个人博客:https://www.manjiexiang.cn/
更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java动态代理
Java动态代理 @Date 2016.11.24 静态代理 提前创建一个代理类,实现和业务逻辑同样的接口 传递业务实现类的对象,在调用业务方法前后可以做代理的逻辑 扩展原有功能,不侵入原有代码 如果需要代理的业务类变多,并且实现方法不一样的情况下,对应的代理类会增多 Java本身动态代理 只能代理接口 实现java.lang.reflect.InvocationHandler接口 通过Proxy.newProxyInstance (obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), InvocationHandler invocationHandler);创建代理类 虚拟机自动调用invoke方法 cglib动态代理 运行期间动态生成Java字节码 不用实现接口,直接底层生成代理类覆盖父类中的方法 实现MethodInterceptor接口的intercept方法 调用重写方法比JDK本身的代理速度快 加载cglib耗时比JDK本身的时间长 不适合反复动态生成新的代理类
- 下一篇
《Java8实战》-第八章笔记(重构、测试和调试)
重构、测试和调试 通过本书的前七章,我们了解了Lambda和Stream API的强大威力。你可能主要在新项目的代码中使用这些特性。如果你创建的是全新的Java项目,这是极好的时机,你可以轻装上阵,迅速地将新特性应用到项目中。然而不幸的是,大多数情况下你没有机会从头开始一个全新的项目。很多时候,你不得不面对的是用老版Java接口编写的遗留代码。 这些就是本章要讨论的内容。我们会介绍几种方法,帮助你重构代码,以适配使用Lambda表达式,让你维护的代码具备更好的可读性和灵活性。除此之外,我们还会讨论目前比较流行的几种面向对象的设计模式,包括策略模式、模板方法模式、观察者模式、责任链模式,以及工厂模式,在结合Lambda表达式之后变得更简洁的情况。最后,我们会介绍如何测试和调试使用Lambda表达式和Stream API的代码。 为改善可读性和灵活性重构代码 从本书的开篇我们就一直在强调,利用Lambda表达式,你可以写出更简洁、更灵活的代码。用“更简洁”来描述Lambda表达式是因为相较于匿名类,Lambda表达式可以帮助我们用更紧凑的方式描述程序的行为。第3章中我们也提到,如果你希望将...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装