You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现二进制文件转图片:求图片转二进制的逆向代码

逆向还原灰度图二进制数据为图片的实现代码

针对你提供的灰度图转二进制字符串的代码,以下是对应的逆向实现,可将文本文件中的二进制数据还原为原始灰度图:

基础版代码(需手动指定原图片尺寸)

from PIL import Image

# 替换为原图片的实际宽高
ORIGINAL_WIDTH = 800
ORIGINAL_HEIGHT = 600

# 读取二进制数据文件
with open("image_data.txt", "r") as f:
    binary_str = f.read().strip()

# 校验数据完整性:每个像素对应8位二进制,总长度需为8的倍数
if len(binary_str) % 8 != 0:
    raise ValueError("二进制数据长度不符合要求,无法还原完整像素")

# 将二进制字符串按每8位拆分,转换为十进制像素值(0-255)
pixel_values = [int(binary_str[i:i+8], 2) for i in range(0, len(binary_str), 8)]

# 创建灰度图对象并写入像素数据
restored_img = Image.new("L", (ORIGINAL_WIDTH, ORIGINAL_HEIGHT))
restored_img.putdata(pixel_values)

# 保存还原后的图片
restored_img.save("restored_grayscale.jpg")

优化版代码(自动读取原图片尺寸)

如果希望无需手动输入尺寸,可先修改原转换代码,在保存二进制数据时同时写入图片宽高:

# 修改后的原转换代码(新增保存尺寸逻辑)
from PIL import Image

img = Image.open("image.jpg")
img = img.convert("L")
pixels = list(img.getdata())
binary_str = ''.join(['{0:08b}'.format(pixel) for pixel in pixels])

# 先写入宽高,再写入二进制数据
with open("image_data.txt", "w") as f:
    f.write(f"{img.width}\n{img.height}\n")
    f.write(binary_str)

对应的逆向代码可自动读取尺寸,无需手动设置:

from PIL import Image

with open("image_data.txt", "r") as f:
    # 读取前两行的宽高数据
    img_width = int(f.readline().strip())
    img_height = int(f.readline().strip())
    # 读取剩余的二进制字符串
    binary_str = f.read().strip()

if len(binary_str) % 8 != 0:
    raise ValueError("二进制数据长度异常,无法还原完整图片")

pixel_values = [int(binary_str[i:i+8], 2) for i in range(0, len(binary_str), 8)]

restored_img = Image.new("L", (img_width, img_height))
restored_img.putdata(pixel_values)
restored_img.save("restored_grayscale.jpg")

注意事项

  • 基础版中必须准确填写原图片的宽高,否则还原出的图片会出现拉伸、变形或损坏
  • 优化版通过在数据文件中记录尺寸,避免了手动输入的误差,推荐使用这种方式

内容的提问来源于stack exchange,提问作者cyner boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:37:59