文章目录

  • 一.Demo
  • 二.程序演示加讲解
  • 三.分析程序
  • 四.注意事项
  • 五.程序的改进

一.Demo

相信许多的小伙伴在平时玩QQ的时候都有发过这样一张表情包,如下:

它其实是由下面的一张表情包演化而来。

今天我们就来教大家如何制作它。

二.程序演示加讲解

# coding=utf-8
from PIL import Image
import argparse#----------------------------------------------#
#命令行输入参数处理
#----------------------------------------------##构建命令行输入参数处理ArgumentParser实例
parser = argparse.ArgumentParser()#输入文件
parser.add_argument('file', default='D:/课程/python/image/myimage1.jpg')#输出文件
parser.add_argument('--output', default=0)#输出文件的宽
parser.add_argument('--width', type=int, default=80)
#输出文件的高
parser.add_argument('--height', type=int, default=80)#-----------------------------------------------#
# 获取参数
#-----------------------------------------------##解析并获取参数
args = parser.parse_args()#输入的图片路径
IMG = args.file
#输入的图片宽度
WIDTH = args.width
#输入的图片高度
HEIGHT = args.height
#输出字符画的路径
OUTPUT = args.outputascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")#----------------------------------------------#
#将256灰度映射到70个字符上
#----------------------------------------------#
def get_char(r, g, b, alpha=256):if alpha == 0:return ' 'length = len(ascii_char)#RGB转灰度值gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)unit = (256.0 + 1) / lengthreturn ascii_char[int(gray / unit)]if __name__ == '__main__':rgb_im = Image.open(IMG)im = rgb_im.convert('RGB')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'print(txt)

我们在Pycharm中的Terminal,先进入我们项目所在地,然后输入如下命令进行传参运行。

python 01.py D:/课程/python/image/myimage1.jpg --output=0 --width=45 --height=20


我们就能将我们的图片数字化。
下面是博主亲自实验得出的图片:

三.分析程序

补充的知识:

灰度值:指黑白图像中点的颜色深度,范围从0到255,白色为255,黑色为0,所以黑白图片也称灰度图像。

RGB:red,green,blue,三原色,人们日常所能看到的颜色都是由三原色组成

我们的实验原理就是将RGB值映射到灰度值上

我们建立一张列表,灰度值小的在列表的开头,灰度值大的作为列表的结尾。这样就能建立起原图与数字化图片之间的联系。

(1)主函数:

Image.open(file)

返回一张图片,file为文件存储路径

rgb_im.convert(mode)

返回一张图片,图片经过格式转换,mode为一种颜色转换模板。
(其他参数,dither:控制颜色抖动,palette:调动调色板,Color:控制调色板的颜色数目,最大有256种)

im.resize(size, filter)

返回一张图片,变量size是所要求的尺寸,是一个二元组:(width, height)。变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。

(2)RGB转灰度值

alpha=0 表示空白
最大为alpha = 255

(3)灰度值转换成字符

im.getpixel((j,i)) 获取得到坐标 (j,i) 位置的 RGB 像素值(但是有的时候会包含 alpha 值),返回的结果是一个元组.* 可以将元组作为参数传递给 get_char,同时元组中的每个元素都对应到 get_char 函数的每个参数。

(4)当然,如果我们想要以文件的形式输出,可以加入使用下面的程序

    if OUTPUT:with open(OUTPUT, 'w') as f:f.write(txt)else:with open("output.txt", 'w') as f:f.write(txt)

四.注意事项

我们在用命令行运行程序的时候,不能写入file=,当然,也不能写成文件路径带有双引号或者单引号,参数之间用空格键隔开。

五.程序的改进

我们可以通过改变ascii_char的值,来改变我们的程序,使得效果最佳。
小技巧:我们可以使得相同或相近的颜色区域字符相同,这样能得到好的效果。如下:

30行代码使用Python制作熊猫表情包(图片字符化)(附有源码逐行分析)相关推荐

  1. python制作表白神器_程序员的七夕用30行代码让Python化身表白神器

    转眼又到了咱们中国传统的情人节七夕了,今天笔者就带大家来领略一下用Python表白的方式.让程序员的恋人们感受一下IT人的浪漫. 一.词云制作 首先咱们可以用之前介绍过的wordcould包制作词云. ...

  2. python制作会动的表情包_利用python图片生成,需10几行代码,生成的动态表情包(小黄鸭)...

    小编找到了10几行的,好玩的动态表情包生成的代码.分享分享! 这个程序怎么做呢?不要急,来听我给大家分析分析. 工具:程序环境 语言:Python 3.6 编辑器:Pycharm 程序步骤 实现字符动 ...

  3. python是动态语言图片_利用python图片生成,需10几行代码,生成的动态表情包(小黄鸭)...

    小编找到了10几行的,好玩的动态表情包生成的代码.分享分享! 这个程序怎么做呢?不要急,来听我给大家分析分析. 工具:程序环境 语言:Python 3.6 编辑器:Pycharm 程序步骤 实现字符动 ...

  4. 一个包含30行代码的Python项目:如何在您最喜欢的Twitcher流式传输时设置SMS通知...

    Hi everyone :) Today I am beginning a new series of posts specifically aimed at Python beginners. Th ...

  5. 利用ps制作熊猫表情包【无图】

    步骤 在ps中导入图片,直接拖入即可 用钢笔工具取得脸部区域 . 顶部导航栏:选择-反选 此时delete脸部以外的部分 图像-调整-去色,成为黑白 图像-调整-曲线,拉动调整颜色 利用橡皮擦擦掉其余 ...

  6. 如何快速生成gif动图表情包?教你制作gif表情包图片

    Gif动图作为当代网络较为流行的一种图片格式,经常会在公众号推文中.聊天软件聊天中见到其身影.那么,gif动图表情包是如何制作的呢?通常情况下,制作gif动画图片需要专业的工具,而大家可以使用[GIF ...

  7. 9行代码用python制作迷宫gif动画

    如何能够用Python自己做一个迷宫动画,然后把我的成果展示给其他人呢?(我知道tkinter, pyglet 和 pyqt,但是它们很难发布给别人看) 现在,可以使用库gifmaze来做这件事了,它 ...

  8. 3行代码,Python数据预处理提速6倍!(附链接)

    来源:新智元 本文约2600字,建议阅读8分钟. 本文介绍了仅需3行代码,将Python数据处理速度提升2~6倍的简单方法. Python是所有机器学习的首选编程语言.它易于使用,并拥有许多很棒的库, ...

  9. 30行代码用python实现软件翻译

    先挂结果: 代码如下: # 开发人:peng # 开发时间 :2022/3/21 14:30 import urllib.request import urllib.parse import json ...

最新文章

  1. python--通过xpath相对节点位置查找元素(续)
  2. Qt Creator指定文本编辑器设置
  3. Java开发手册——嵩山版(清幽现云山,虚静出内功)
  4. Pensieve:AI带来的更流畅的高质量观看体验
  5. python3多线程queue_Python多线程(3)——Queue模块
  6. 猎豹浏览器插件无法加载怎么办 插件无法加载解决方法
  7. 面向初学者的带有MVC API的Android 管理表CRUD MSSQL
  8. html+CSS+JS实现小米官网(附全部代码)
  9. 【Java】蓝桥杯历届试题PREV(一)
  10. ubuntu18.04打不开网易云音乐
  11. 链接测试苹果手机软件,【苹果】苹果手机上如何使用免费观影软件?用TestFlight+某影视APP试试...
  12. 麒麟信安加入中国首个桌面操作系统根社区openKylin, 共擎开源未来!
  13. 实用现代汉语语法笔记
  14. 使用Fiddler破解钉钉回放视频不能下载
  15. Kafka监控eagle
  16. left + (right - left) / 2;
  17. Excel中Chart对象成员表
  18. Python实现自由爆率抽奖小程序
  19. Mybatis 动态切换数据库
  20. 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)

热门文章

  1. 薪火数据DataInside祝您腊八节快乐!
  2. (转)Windows远程登陆Linux桌面的方法
  3. win10找回Windows照片查看器
  4. python爬虫实战三:爬取知乎评论
  5. 传统计算机与未来计算机的优劣势,传统计算机
  6. POJ 2111 Millenium Leapcow(记忆化搜索+dfs记录路径)
  7. 封神召唤师显示服务器爆满,打开封神召唤师提示网络异常或者连接不上
  8. C++ Tuxedo FML类封装
  9. Android开发丶将网络获取到的列表数据重新排序
  10. cocoscreator练手 入门 Flappy Bird 像素鸟项目(1)