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 左右的女士接通一个电话,她大声地说:”我现在在医院打针!“这句话一下子将周围人的目光吸引了过去。她没说几句,车厢内响起了报站声,不知电话彼端的人什么反应。
类似的戏码时有发生……
至于这张图片,我已经不想发了。
当然,最后还是祝各位在愚人节玩得愉快!
原文地址:https://www.cnblogs.com/yorkyu/p/10625372.html
时间: 2024-11-06 19:25:49