最近抖音上挺火的一个小把戏,在记事本打开,一整篇的乱码字符,然后进过调整之后,出现一张由各种字符组成的黑白照片。感觉挺有意思的,今天就来看看这是怎么实现的。
字符画,一种由字母、标点、汉字或其他字符组成的图画。就像下面的这样的图片,大家放大看都是由英文字符拼装起来的。
原图
效果图
左上角局部图
效果图是不是感觉挺有意思的,其实实现很简单。我是通过python,几十行代码就能实现,前提是你熟悉python代码。如果不熟悉没关系,可以看我们往期精彩的python教程:
入门Python,这一篇就够了。小白必看,文末有福利!
运用python图像处理PIL中的Image模块来处理图像
1、需要安装python
2、PIL库(在cmd中运行安装命令:pip install Pillow)
Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如open、save、conver、show…等功能。下面简单介绍下代码中用到的类。
open函数
Image.open(file) ⇒ image
Image.open(file, mode) ⇒ image
要从文件加载图像,使用 open() 函数。如果变量mode被设置,那必须是“r”。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。
例:
from PIL import Image ##调用库
im = Image.open("D:\test\test.jpg") ##文件存在的路径
im.show()
Resize函数
im.resize(size) ⇒ image
im.resize(size, filter) ⇒ image
返回改变尺寸的图像的拷贝。变量size是所要求的尺寸,是一个二元组:(width, height)。变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。在当前的版本中bilinear和bicubic滤波器不能很好地适应大比例的下采样(例如生成缩略图)。用户需要使用ANTIALIAS,除非速度比质量更重要。
from PIL import Image
im = Image.open("D:\test\test.jpg")
region = im.resize((400, 400)) ##重新设定大小
region.show()
Getpixel函数
im.getpixel(xy) ⇒ value or tuple
返回给定位置的像素值。如果图像为多通道,则返回一个元组。该方法执行比较慢;如果用户需要使用python处理图像中较大部分数据,可以使用像素访问对象(见load),或者方法getdata()。
from PIL import Image
im = Image.open("D:\test\test.jpg")
print(im.getpixel((0,0)))
print(im.getpixel((4,0)))
r,g,b = im.split()
print(b.getpixel((11,8)))
第一步:打开图片
img = Image.open(imgname)
第二步:对图片重新设置大小
#第二个参数可以设置图片的质量,有四个选项NEAREST,BILINEAR,BICUBIC,LANCZOS
#默认为NEAREST,LANCZOS图像质量最高
img = img.resize((width,height),Image.LANCZOS)
第三步:处理图片
#将彩色图片的RBG数值转化为灰度值,并根据字符的个数计算出每个字符对应几个灰度值
def get_char(r,g,b,alpha= 256):
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unitcount = (256.0+1)/length
return ascii_char[int(gray/unitcount)]
for i in range(height):
for j in range(width):
#img.getpixel(j,i)返回的是一个三元组元素,加*是为了将其分为三个变量值
txt += get_char(*img.getpixel((j,i)))
txt += '\n'
第四步:
with open(output,'w') as f:
f.write(txt)
这样就完成了。
是不是很简单,大家也赶紧动手制作一张自己的字符图吧。由于篇幅和不方便阅读的原因,这里就不展示源码了。
如果你想体验下和需要源码的同学,请关注我们的微信公众号回复“字符图”获取源码吧。
也欢迎大家关注我们的公众号,来跟小编一起交流分享你制作的字符图。欢迎大家踊跃留言。
- END -
参考1:https://blog.csdn.net/zhangziju/article/details/79123275
参考2:https://blog.csdn.net/dpengwang/article/details/79076188
侵删,谢谢。