[ harrynull.tech ] Stage-19 X BitMap

本来是做着好玩的,虽然好像有点脑洞,但是这个挺有意思的记录一下
题目如下

#define test_width 40
#define test_height 7
static char test_bits[] = {
  0x00, 0x80, 0x00, 0x00, 0x00, 0x15, 0x80, 0xA0, 0x44, 0x80, 0x2B, 0xA9,
  0x66, 0xE4, 0x80, 0xB9, 0xAA, 0x28, 0x4C, 0x96, 0x09, 0xB3, 0x2C, 0x54,
  0xAA, 0x31, 0x82, 0x2A, 0x95, 0xAA, 0x80, 0x01, 0x0C, 0x00, 0x00, }; 

好了,没了,刚看完我是懵逼的。。。
好吧,再瞅瞅?
有宽和高,那么八成是个图片了,但是怎么把它变成图片,看了一下bits有35个,好像有点巧,正好是高的倍数,那么排成7行的话,每行5个,唉,又很巧的,5*8不就是40的吗,是8呢,那么十有八九要转成2进制,于是我们得到如下

0000000000000001000000000000000000000000
1010100000000001000001010010001000000001
1101010010010101011001100010011100000001
1001110101010101000101000011001001101001
1001000011001101001101000010101001010101
1000110001000001010101001010100101010101
0000000110000000001100000000000000000000

好了继续迷茫。。。
记得以前见过二进制字符串转成二维码的,那么试试?
好的,动手吧
然后得到了下面的脚本

from PIL import Image
s = [0x00, 0x80, 0x00, 0x00, 0x00, 0x15, 0x80, 0xA0, 0x44, 0x80, 0x2B, 0xA9, 0x66, 0xE4, 0x80, 0xB9, 0xAA, 0x28, 0x4C, 0x96, 0x09, 0xB3, 0x2C, 0x54, 0xAA, 0x31, 0x82, 0x2A, 0x95, 0xAA, 0x80, 0x01, 0x0C, 0x00, 0x00]

width = 40
height = 7

img = Image.new("RGB", (width, height))

flag = ''
for c in s:
    flag += bin(c)[2:].rjust(8,'0')

n = 0
for i in range(height):
    for j in range(width):
        if flag[n] == '0':
            img.putpixel([j, i], (255, 255, 255))
        else:
            img.putpixel([j, i], (0, 0, 0))
        n += 1

img.show()
# img.save('test.bmp')

然后智障的一幕出现了。。。

image.png

没错。。。我忘了它的宽高很小的问题了。。
然后我试了一下resize(),然后他给我报错了,好吧,我错了,我自己写还不行吗
然后有了下面这个

from PIL import Image
s = [0x00, 0x80, 0x00, 0x00, 0x00, 0x15, 0x80, 0xA0, 0x44, 0x80, 0x2B, 0xA9, 0x66, 0xE4, 0x80, 0xB9, 0xAA, 0x28, 0x4C, 0x96, 0x09, 0xB3, 0x2C, 0x54, 0xAA, 0x31, 0x82, 0x2A, 0x95, 0xAA, 0x80, 0x01, 0x0C, 0x00, 0x00]

width = 40
height = 7
t = 20

img = Image.new("RGB", (width*t, height*t))

flag = ''
for c in s:
    flag += bin(c)[2:].rjust(8,'0')

print len(flag)

for i in range(height*t):
    for j in range(width*t):
        x = j / t 
        y = i / t
        n = y*40 + x
        if flag[n] == '0':
            img.putpixel([j, i], (255, 255, 255))
        else:
            img.putpixel([j, i], (0, 0, 0))

img.show()
# img.save('test.bmp')

跑一下,出来长下面这样

image.png

好像有点样子了呢,是字母的样子
翻转看下,有html呢,应该就是这样弄没错,但这其他的我怎么看不懂啊。。然后继续懵逼
没辙,去看了下评论,然后知道了这是X BitMap,解法跟我想的一样,但是有一个问题,就是bit存放大小端的问题,于是我去改了一下代码,将二进制的数字倒转一下
于是得到下面的

image.png

好了结果出来了,过程还是很有意思的
最后的代码贴一下

# -*- coding: utf8 -*-
# by: gakki429
from PIL import Image
s = [0x00, 0x80, 0x00, 0x00, 0x00, 0x15, 0x80, 0xA0, 0x44, 0x80, 0x2B, 0xA9, 0x66, 0xE4, 0x80, 0xB9, 0xAA, 0x28, 0x4C, 0x96, 0x09, 0xB3, 0x2C, 0x54, 0xAA, 0x31, 0x82, 0x2A, 0x95, 0xAA, 0x80, 0x01, 0x0C, 0x00, 0x00]

width = 40
height = 7
t = 20 # 放大倍数

img = Image.new("RGB", (width*t, height*t))

flag = ''
for c in s:
    flag += bin(c)[2:].rjust(8,'0')[::-1] # 转换为二进制数字,并填充至8位然后倒转

print len(flag)

for i in range(height*t):
    for j in range(width*t):
        x = j / t 
        y = i / t
        n = y*40 + x
        # print 'i:%d, j:%d, x:%d, y:%d, n:%d' % (i, j, x, y, n)
        if flag[n] == '0':
            img.putpixel([j, i], (255, 255, 255))
        else:
            img.putpixel([j, i], (0, 0, 0))

img.show()
# img.save('test.bmp')
关于X BitMap 
https://en.wikipedia.org/wiki/X_BitMap
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,244评论 25 707
  • 05石佳慧来访 津渡目录 期末基本上都是班主任的事,虽然都是些常规的事,但事事都要靠班主任来落实,好在东方有一套偷...
    大尾巴狗阅读 513评论 0 3
  • 毕业一年了,刚离开学校那会儿遇到了很多不顺心的事情,厌烦此刻的生活又害怕面对未来的自己,梦想和现实的差距越来越远,...
    坚持自己最初的梦阅读 226评论 0 1
  • 有一种动物生活在非洲,长颈鹿,它被称为世界上最悲伤的动物。 因为人们总说它是“哑巴”,事实上它会说话,只是和大家不...
    Guanguannn阅读 590评论 1 2