1024节快乐!

今天朋友圈出现了好多类似这样的代码和图片,我也蹭一波热度,祝各位同行节日快乐,早日过上你想要的生活!


image.png

我的方式比较取巧,首先得自己生成一张对比度比较高的图片,如下:

1024.png

代码逻辑其实很简单,还记得当初是怎么处理验证码的吗?二值化

用PIL打开图像,轮询像素点,所有非白色的都当成这1,白色也为空。这样就可以把图片处理成一个数组了,之后1的内容可以用随机值填充,最后把数组打印出来即可。代码如下:

from PIL import Image
import random

charactors = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

img = Image.open('1024.png')
img = img.resize((img.width//3, img.height//3))

width, height = img.width, img.height
for x in range(height):
    for y in range(width):
        r, g, b, _ = img.getpixel((y, x))
        pix = ' ' if r or g or b else random.choice(charactors)
        print(pix, end='')
    print()

顺着这个逻辑再想一想,其实还有很多有趣的点子:

  1. 除了1024,这个图片可以是任何内容,一个爱心?名字?玫瑰?
  2. 能不能做出阴影效果?
  3. 能不能自己生成这个数组?比如说生成一个二维数组,只包含0和1,如果把这个数组打印出来,所有是1的地方能连成一个图案。字符图像编码了解一下。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 127,592评论 18 546
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 6,801评论 1 38
  • pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 ...
    王震阳阅读 77,296评论 25 509
  • 王爱丽 焦点网络高级一期 洛阳(18.8.23)持续原创分享第458天(春雪原创分享第592天)坚持读书打卡183...
    春雪ly阅读 298评论 0 0
  • 德国人极为重视家庭教育,也是唯一把父母教养儿童的义务明文写入宪法的国家。比起传授知识,德国人更注重传授技能,注重培...
    遇见斯人如彩虹阅读 48评论 0 0