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
相关产品推荐
相关产品推荐

