跳转至

· file2img

GitHub   ·   Playground

file2img 是个小工具,把任意二进制文件塞进 PNG 或其它无损编码的图片里。原理是把字节分成 RGB 像素(每像素 3 字节),无损压缩。逆向也一样,无损还原。

实现

现在看来两年前代码还真是充斥着过度封装 😂

from msgspec.json import decode, encode

class Metadata(Struct, omit_defaults=True):
    length: int
    filename: Optional[str] = None

def encode_meta(length: int, filename: Optional[str] = None):
    return encode(Metadata(length, filename))
def encode(data, file_format: Format, filename: Optional[str] = None):
    data = encode_meta(len(data), filename) + b"\n" + data
    length = len(data)

    img_size = ceil((length / 3) ** 0.5)

    buffer = np.zeros((img_size, img_size, 3), np.uint8)
    buffer.ravel()[:length] = np.frombuffer(data, dtype=np.uint8)

    return imwrite("<bytes>", buffer, extension=f".{file_format}", lossless=True)

def decode(data):
    meta, data = bytes(imread(data)).split(b"\n", 1)

    meta = decode_meta(meta)

    return data[: meta.length], meta

效果

比如这张图片就是一个文本文件被压缩为 webp

x-size-in: 237994
x-size-out: 62000

看来压缩率还蛮高的

encoded image

欢迎猜猜或者试试这张图片是什么。在 file2img.vercel.app 上 parse 试试看吧!


在杭州 实习 的时候跟老板聊过一下,然后试了下用各种中继传图片,发现都打不开了。看来它们都会隐性地重新压制图片……