本來是做著好玩的三热,雖然好像有點(diǎn)腦洞鼓择,但是這個(gè)挺有意思的記錄一下
題目如下
#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, };
好了,沒了就漾,剛看完我是懵逼的呐能。。抑堡。
好吧摆出,再瞅瞅朗徊?
有寬和高,那么八成是個(gè)圖片了懊蒸,但是怎么把它變成圖片荣倾,看了一下bits有35個(gè),好像有點(diǎn)巧骑丸,正好是高的倍數(shù),那么排成7行的話妒貌,每行5個(gè)通危,唉,又很巧的灌曙,5*8不就是40的嗎菊碟,是8呢,那么十有八九要轉(zhuǎn)成2進(jìn)制在刺,于是我們得到如下
0000000000000001000000000000000000000000
1010100000000001000001010010001000000001
1101010010010101011001100010011100000001
1001110101010101000101000011001001101001
1001000011001101001101000010101001010101
1000110001000001010101001010100101010101
0000000110000000001100000000000000000000
好了繼續(xù)迷茫逆害。。蚣驼。
記得以前見過二進(jìn)制字符串轉(zhuǎn)成二維碼的魄幕,那么試試?
好的颖杏,動(dòng)手吧
然后得到了下面的腳本
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')
然后智障的一幕出現(xiàn)了纯陨。。留储。
image.png
沒錯(cuò)翼抠。。获讳。我忘了它的寬高很小的問題了阴颖。。
然后我試了一下resize()丐膝,然后他給我報(bào)錯(cuò)了量愧,好吧,我錯(cuò)了尤误,我自己寫還不行嗎
然后有了下面這個(gè)
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
好像有點(diǎn)樣子了呢,是字母的樣子
翻轉(zhuǎn)看下损晤,有html呢软棺,應(yīng)該就是這樣弄沒錯(cuò),但這其他的我怎么看不懂啊尤勋。喘落。然后繼續(xù)懵逼
沒轍茵宪,去看了下評論,然后知道了這是X BitMap瘦棋,解法跟我想的一樣稀火,但是有一個(gè)問題,就是bit存放大小端的問題赌朋,于是我去改了一下代碼凰狞,將二進(jìn)制的數(shù)字倒轉(zhuǎn)一下
于是得到下面的
image.png
好了結(jié)果出來了,過程還是很有意思的
最后的代碼貼一下
# -*- 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 # 放大倍數(shù)
img = Image.new("RGB", (width*t, height*t))
flag = ''
for c in s:
flag += bin(c)[2:].rjust(8,'0')[::-1] # 轉(zhuǎn)換為二進(jìn)制數(shù)字沛慢,并填充至8位然后倒轉(zhuǎn)
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')
關(guān)于X BitMap
https://en.wikipedia.org/wiki/X_BitMap