002 愚人节的“礼物”

Posted yorkyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002 愚人节的“礼物”相关的知识,希望对你有一定的参考价值。

1. 缘起

愚人节就要到了,这两天看到一条热度比较高的新闻:微软禁过愚人节。我想,要不今年在朋友圈发张恶搞的图片?何乐而不为呢?

2. 想法

(1) 一开始,我准备发一张空白的图片

  • 分辨率就取 1080p 吧
    • 打开“画图”
    • 按 ctrl+w
    • 技术图片

(2) 接下来,我觉得写点东西比较好

  • 字体就用 20 号加粗的“微软雅黑”吧
  • 颜色选择“灰色-25%”
  • 写在左下角
  • 技术图片

(3) 给图片加点料

1) 想起一种把压缩包藏到图片里的方法

  • 关键命令:copy /b a.jpg+b.zip c.jpg
  • 具体做法:
    • 把图片与压缩包放到同一个文件夹(如 d:\\magic)中
    • 调出 cmd
    • cd 到那个文件夹
    • 输入上述“关键命令”
      • a.jpg 原图(若是 .png 格式,下方就用 c.png;我试了一下,混用也能成功)
      • b.zip 要藏入的压缩包
      • c.jgp 合成后图片的名字
  • 变回来:
    • 将合成后的图片的后缀改为 zip
    • 解压即可

2) 那压缩包里放什么好呢

  • 要不,用 Python 的 turtle 画一张吧
  • 程序
import turtle as tt
from math import sqrt

tt.setup(600, 600)          # 设置 600 x 600 的画布并居中
tt.hideturtle()             # 隐藏画笔
tt.pensize(6)               # 设置画笔粗细
tt.pencolor("#00f5ff")      # 设置画笔颜色

# 走到右上角
tt.seth(45)
tt.pu()
tt.fd(200)
tt.pd()

# 鱼的“脑门”
tt.seth(135)
tt.circle(200, 130)         # 相当于极坐标的 roll(r, angle)

# 鱼嘴
tt.pu()
tt.circle(200, 10)
tt.pd()

# 鱼腹
tt.circle(200, 130)

# 鱼“屁股”
tt.seth(0)
tt.circle(200/sqrt(2), -90)

# 鱼尾(开始)
tt.seth(-90)
tt.circle(100, 135)

tt.seth(0)
tt.circle(100/sqrt(2), -180)

# 鱼尾(结束)
tt.seth(135)
tt.circle(100, 135)

# 鱼“后背”
tt.seth(90)
tt.circle(-200/sqrt(2), 90)

# 鱼目
tt.pu()
tt.goto(-110, 50)
tt.pd()
tt.circle(20)

# 鱼珠
tt.pu()
tt.goto(-113, 70)
tt.pd()
tt.circle(6)

# 鱼嘴旁的小气泡
tt.pu()
tt.goto(-230, 60)
tt.pd()
tt.circle(15)

# 鱼嘴旁的大气泡
tt.pu()
tt.goto(-250, 120)
tt.pd()
tt.circle(30)

# 打个标签
tt.pu()
tt.goto(50, -260)
tt.pd()
tt.write("—— by YorkFish", font=("consolas", 20, "bold"))

tt.done()                   # 绘制结束后停住
  • 技术图片

3) 再加一点艺术感

  • 用 Python 的 pillow 把图片改成字符画
  • 程序
from PIL import Image, ImageFilter

# 这个字符串是我随便敲的,就是大小写字母加一些常见字符
codeLib = '''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<=>:;+~-,.^"'*`_'''
count = len(codeLib)

def transform1(image_file):
    image_file = image_file.convert("L")                # L 为“黑白模式”
    codePic = ""                                        # 存储字符
    for h in range(image_file.size[1]):                 # 图片的纵向像素值
        for w in range(image_file.size[0]):             # 图片的横向像素值
            gray = image_file.getpixel((w, h))          # 计算每个点的“灰度值”,也有别的方法
            codePic += codeLib[ int(count*gray/256)]    # 因为字符串不足 256 个
        codePic += "\\r\\n"                               # 回车

    return codePic

fp = open(u"fish.png", "rb")                            # 要变成字符画的原图
image_file = Image.open(fp)
image_file = image_file.resize((int(image_file.size[0]*0.5), int(image_file.size[1]*0.25)))                         # 高质量缩放

tmp = open("fish.txt", "w")                             # 变成字符画后的文件
tmp.write(transform1(image_file))
tmp.close()
  • 为方便查看,我调了一下字体
    • 记事本菜单栏 -> 格式 -> 字体 -> consolas -> 2 号
  • 技术图片

4) 之前作过 Python Challenge 的某题:从一个字符串中找出谜底

  • 我在 [Python3 练习] 009 写过
  • 那就加个彩蛋
  • 用“愚人节快乐”随机替换字符画中的 5 个字符
  • 这样就可以用那个程序的方法检索出这个彩蛋
  • 。。。。。。
  • 不,没有人会这么无聊玩这个游戏的!

3. 缘灭

其实天天都是“愚人节”,前段时间,我在地铁里见到这样一幕:

一位 50 左右的女士接通一个电话,她大声地说:”我现在在医院打针!“这句话一下子将周围人的目光吸引了过去。她没说几句,车厢内响起了报站声,不知电话彼端的人什么反应。

类似的戏码时有发生……

至于这张图片,我已经不想发了。

当然,最后还是祝各位在愚人节玩得愉快!

以上是关于002 愚人节的“礼物”的主要内容,如果未能解决你的问题,请参考以下文章

愚人节小礼物----fiddler导出JMeter脚本v4.4.0.2版本

我是如何用一行代码表白学妹~❤520情人节送女朋友的3D樱花雨相册礼物❤~(程序员表白专属)

HDU - 1870愚人节的礼物(水题模拟 思想类似于栈?)

[HDU1870]愚人节的礼物

Hdu 1870 愚人节的礼物

hdoj-1870-愚人节的礼物(栈)