如何用 Python 生成指定文件大小的图片(如 1M, 2M, 3M, ... 100M)

RT,不用 python 也行,达到目的就好
做一张指定 size 的图片,比如 1M, 2M, 3M, 4M…100M
如何用 Python 生成指定文件大小的图片(如 1M, 2M, 3M, … 100M)

9 回复

最后用 00 填充就好了


要生成指定大小的图片,最简单的方法是创建一个纯色图片然后填充随机数据来达到目标文件大小。这里给你一个实用的方案:

from PIL import Image
import os
import random

def create_image_with_size(target_size_mb, output_path='output.jpg', base_size=(1000, 1000)):
    """
    生成指定大小的图片
    
    参数:
        target_size_mb: 目标文件大小(MB)
        output_path: 输出文件路径
        base_size: 基础图片尺寸,默认1000x1000像素
    """
    target_bytes = target_size_mb * 1024 * 1024
    
    # 先创建一个基础图片
    img = Image.new('RGB', base_size, color=(random.randint(0, 255), 
                                            random.randint(0, 255), 
                                            random.randint(0, 255)))
    
    # 保存为最高质量的JPEG
    img.save(output_path, 'JPEG', quality=95)
    
    # 如果文件大小不够,添加随机数据
    current_size = os.path.getsize(output_path)
    if current_size < target_bytes:
        with open(output_path, 'ab') as f:
            # 生成随机数据填充到目标大小
            remaining = target_bytes - current_size
            f.write(os.urandom(remaining))
    
    print(f"已生成: {output_path} ({target_size_mb}MB)")

# 使用示例
create_image_with_size(1)  # 生成1MB的图片
create_image_with_size(10)  # 生成10MB的图片

这个方法的原理是先创建一个基础图片,然后通过附加随机二进制数据来精确控制最终文件大小。用os.urandom()生成随机数据可以确保填充的内容是随机的,避免压缩算法的影响。

如果你需要生成特定尺寸的图片,可以调整base_size参数。对于更大的文件(比如100MB),建议适当增加基础图片的尺寸,减少随机数据的填充量。

总结:用基础图片加随机数据填充是最可靠的方法。

png 格式包括多种数据块,有个叫 tEXt 的文本信息数据块,可以随便你存啥都行。利用这个填充图像到指定大小就行了。https://www.myway5.com/index.php/2017/11/10/png%E6%A0%BC%E5%BC%8F%E5%88%86%E6%9E%90%E4%B8%8E%E5%8E%8B%E7%BC%A9%E5%8E%9F%E7%90%86/

直接 bmp 位图填充

预先准备一个文件头,之后在文件头的后面瞎瞎 jb 把数据塞进去,比如全写 0、全写 1、全写 F 都可以,写够 1M 2M 4M 100M 为止,保存文件,扩展名用 bmp。

结束位置之后 00 填充

ctf 了解一下

做一个 1M,2M,3M 的文件,然后将文件名改成 png/jpg/bmp

先安装必要的软件包。以 Ubuntu Linux 为例:
apt-get install python-dev libjpeg-dev python-pip
pip install pillow

然后用如下代码生成相应大小的图像文件。

#!/usr/bin/python

from PIL import Image

M1 = (1280, 960)
M2 = (1600, 1200)
M3 = (2048, 1536)
M4 = (2240, 1680)
M5 = (2560, 1920)
M6 = (3032, 2008)
M7 = (3072, 2304)
M8 = (3264, 2448)

COLOR = (255, 255, 255)

FORMAT = "PNG"

def create_image(filename, size, color):
img = Image.new(‘RGB’, size, color)
img.save(filename, FORMAT)

create_image(“1M.png”, M1, COLOR)
create_image(“2M.png”, M2, COLOR)
create_image(“3M.png”, M3, COLOR)
create_image(“4M.png”, M4, COLOR)

dd if=/dev/zero of=./file.txt bs=1M count=10

回到顶部