python jpg 简单研究 1

起因, 目的:

就是想看看 jpg 里面有什么。
其实,我最开始的想法是,自己来写一个文件格式,只能我自己才能打开。
然后看了 jpg 相关的内容,发现太复杂,只能罢了。

1. jpg 的魔法头数字(File Magic Numbers : ff d8 ff e0

验证一下是不是 jpg
def main(filename):
    print(f"filename: {filename}")

    with open(filename, 'rb') as file:
        first_4_bytes = file.read(4)
        print(first_4_bytes)
        magic_numbers = first_4_bytes.hex()

    print(f"magic numbers: {magic_numbers}")
    return magic_numbers

if __name__ == "__main__":
    main("bt1.jpg")
    
# 输出
# filename: bt1.jpg
# b'\xff\xd8\xff\xe0'
# magic numbers: ffd8ffe0
2. 搞点小动作。
  1. 先在一个 jpg 文件的文件头部, 添加一些字节,产生一个新的文件,X?
  2. 这个 X 就会产生 : Windows照片查看器无法显示此图片
  3. 然后从文件头删除这些添加的字节, 把 X 还原为 jpg.

def modify_jpg(input_file, output_file):
    """
    在JPG文件的文件头添加指定的字节

    :param input_file: 输入文件的路径
    :param output_file: 输出文件的路径
    :param bytes_to_add: 要添加的字节
    """
    bytes_to_add = b'\x01\x02\x03\x04'

    with open(input_file, 'rb') as f:
        file_content = f.read()

    # 在文件头添加字节
    modified_content = bytes_to_add + file_content

    with open(output_file, 'wb') as f:
        f.write(modified_content)
    print(f"File '{output_file}' has been created with the added bytes.")


def restore_jpg(modified_file, original_file):
    """
    从修改后的JPG文件头删除之前添加的字节,还原JPG文件
    :param modified_file: 被修改的文件路径
    :param original_file: 要写入还原后文件的路径
    """
    with open(modified_file, 'rb') as f:
        file_content = f.read()

    # 检查文件内容是否以添加的字节开始
    if file_content.startswith(b'\x01\x02\x03\x04'):
        # 删除文件头的字节
        restored_content = file_content[4:]
    else:
        print("The file does not start with the expected bytes.")
        return

    with open(original_file, 'wb') as f:
        f.write(restored_content)
    print(f"File '{original_file}' has been restored.")

# 使用示例
input_path = 'bt1.jpg'  # 原始JPG文件路径
modified_path = 'modified.jpg'  # 修改后的文件路径
restored_path = 'restored.jpg'  # 还原后的文件路径

# 第一步:修改JPG文件
modify_jpg(input_path, modified_path)

# 第二步:还原JPG文件
restore_jpg(modified_path, restored_path)

结论 + todo

有时候,一时的想法, 不知从何而起,以为很简单,其实很费劲。


老哥留步,支持一下。

请求支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

waterHBO

老哥,支持一下啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值