在一些社群看到的“乱码”图是啥,以及针对的一点改进
- 内容介绍
- 文章标签
- 相关推荐
有时候在一些聊天分享的社区/群聊里面会看到类似的图像
image1020×618 107 KB
这种看上去纯乱码的图片是什么呢?
这其实是一种利用了 Gilbert 曲线(广义希尔伯特曲线) 的图像混淆(至于为啥要混淆那心照不宣)
e974199a120267e22f6f88a1a4dd2ef9602×624 41.7 KB
但是这样混淆掉的图像也有很明显的问题:别人压根不知道解开后里面会是啥内容,万一开到一些不好的把人吓出心理阴影咋办
基于此,我又在这个基础上加了一层小预览机制:
- 先把原图按 tile 切块
- 按固定步长抽样一些 tile
- 把这些 tile 重新拼到左上角
- 形成一个低分辨率预览
- 剩下区域再做 Gilbert 路径混淆
这样最后出来的图就很有意思:
- 左上角还能大致看出原图内容
- 主体区域已经被混淆
就像这样:
unmuddled1024×1024 377 KB
muddled1026×1026 532 KB
也可以调整的更抽象一些(细节更低、尺寸更小),这里为了方便看出来我调的比较清晰,实际上可用很抽象的:
image1491×1380 485 KB
Python的实现逻辑:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
image_muddle_gilbert.py
CLI 示例:
# 编码:保留左上角预览,非预览区使用 Gilbert 曲线路径做循环位移混肴
python image_muddle_gilbert.py encode --in in.jpg --out muddled.png \
--tile 32 32 --stri
有时候在一些聊天分享的社区/群聊里面会看到类似的图像
image1020×618 107 KB
这种看上去纯乱码的图片是什么呢?
这其实是一种利用了 Gilbert 曲线(广义希尔伯特曲线) 的图像混淆(至于为啥要混淆那心照不宣)
e974199a120267e22f6f88a1a4dd2ef9602×624 41.7 KB
但是这样混淆掉的图像也有很明显的问题:别人压根不知道解开后里面会是啥内容,万一开到一些不好的把人吓出心理阴影咋办
基于此,我又在这个基础上加了一层小预览机制:
- 先把原图按 tile 切块
- 按固定步长抽样一些 tile
- 把这些 tile 重新拼到左上角
- 形成一个低分辨率预览
- 剩下区域再做 Gilbert 路径混淆
这样最后出来的图就很有意思:
- 左上角还能大致看出原图内容
- 主体区域已经被混淆
就像这样:
unmuddled1024×1024 377 KB
muddled1026×1026 532 KB
也可以调整的更抽象一些(细节更低、尺寸更小),这里为了方便看出来我调的比较清晰,实际上可用很抽象的:
image1491×1380 485 KB
Python的实现逻辑:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
image_muddle_gilbert.py
CLI 示例:
# 编码:保留左上角预览,非预览区使用 Gilbert 曲线路径做循环位移混肴
python image_muddle_gilbert.py encode --in in.jpg --out muddled.png \
--tile 32 32 --stri

