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

类似的戏码时有发生……

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

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

原文地址:https://www.cnblogs.com/yorkyu/p/10625372.html

时间: 2024-11-06 19:25:49

002 愚人节的“礼物”的相关文章

1045: 愚人节的礼物

1045: 愚人节的礼物 时间限制: 1 Sec  内存限制: 128 MB提交: 169  解决: 137[提交][状态][讨论版] 题目描述 四月一日快到了,Vayko 想了个愚人的好办法——送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko 为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或者多个盒子.假设放礼物的盒子里不再放其他盒子.用()表示一个盒子,B表示礼物,Vayko 想让你帮她算出愚人指数,即最少需要拆多少个盒子才能拿到礼物. 输入 本题目包含

HDU 1070.愚人节的礼物【字符串处理】【思维练习】【8月2】

愚人节的礼物 Problem Description 四月一日快到了,Vayko想了个愚人的好办法--送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或者多个盒子.假设放礼物的盒子里不再放其他盒子. 用()表示一个盒子,B表示礼物,Vayko想让你帮她算出愚人指数,即最少需要拆多少个盒子才能拿到礼物. Input 本题目包含多组测试,请处理到文件结束. 每组测试包含一个长度不大于1000,只包含'(',')'和'

hdoj,愚人节的礼物

 和括号配对问题差不多,不懂的可以先看看括号配对,这几天在学STL,有兴趣的大家一起学,你们可以看看我的气他文章,都是浅显易懂的,适合我们这些初学者 愚人节的礼物 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 20   Accepted Submission(s) : 14 Font: Times New Roman | Verdan

hdoj 1870愚人节的礼物

 /*1870愚人节的礼物 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6260    Accepted Submission(s): 3788 Problem Description 四月一日快到了,Vayko想了个愚人的好办法--送礼物.嘿嘿,不要想的太好, 这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个

hdu 1870 愚人节的礼物 (栈)

愚人节的礼物 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6260    Accepted Submission(s): 3788 Problem Description 四月一日快到了,Vayko想了个愚人的好办法--送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒

[HDU1870]愚人节的礼物

愚人节的礼物 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16116    Accepted Submission(s): 9475 Problem Description 四月一日快到了,Vayko想了个愚人的好办法——送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒

愚人节的礼物

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6417    Accepted Submission(s): 3897 Problem Description 四月一日快到了,Vayko想了个愚人的好办法--送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放

hdu1870(愚人节的礼物)--- 简单栈类

点击打开链接 Problem Description 四月一日快到了,Vayko想了个愚人的好办法--送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或者多个盒子.假设放礼物的盒子里不再放其他盒子. 用()表示一个盒子,B表示礼物,Vayko想让你帮她算出愚人指数,即最少需要拆多少个盒子才能拿到礼物. Input 本题目包含多组测试,请处理到文件结束. 每组测试包含一个长度不大于1000,只包含'(',')'和'

hdu 愚人节的礼物 (线段思想)

题目Description http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16891 四月一日快到了,Vayko想了个愚人的好办法――送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或者多个盒子.假设放礼物的盒子里不再放其他盒子. 用()表示一个盒子,B表示礼物,Vayko想让你帮她算出愚人指数,即最少需要拆多少个盒子才能拿到礼物. Inp