创建一组随机jpg

2024-05-20 22:42:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是一个场景,我想创建一组随机的,小的jpg,大小在50字节到8k之间,只要jpeg的实际视觉内容是有效的,它们就不相关。我需要生成一千个左右,而且它们都必须是唯一的-即使它们只是由一个像素不同。我可以写一个jpeg页眉/页脚和一些随机字节吗?我无法使用现有照片或来自网络的照片集。

第二个问题是,对于程序的每次运行,映像集必须是不同的。

我更喜欢在python中这样做,因为包装脚本在python中。

我一直在寻找从零开始生成jpg的python代码,但没有找到任何东西,所以指向库的指针也一样好。


Tags: 代码程序网络脚本内容字节场景像素
3条回答

如果不关心文件的内容,可以使用枕头(PIL.Image.new[0])创建有效的JPEG:

from PIL import Image

width = height = 128
valid_solid_color_jpeg = Image.new(mode='RGB', size=(width, height), color='red')
valid_solid_color_jpeg.save('red_image.jpg')

[0]https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.new

//EDIT:我认为OP希望生成有效的图像,而不关心它们的内容(这就是我建议使用纯色图像的原因)。这是一个函数,它生成带有随机像素的有效图像,并将随机字符串写入生成的图像。唯一的依赖是枕头,其他一切都是纯Python。

import random
import uuid

from PIL import Image, ImageDraw    


def generate_random_image(width=128, height=128):
    rand_pixels = [random.randint(0, 255) for _ in range(width * height * 3)]
    rand_pixels_as_bytes = bytes(rand_pixels)
    text_and_filename = str(uuid.uuid4())

    random_image = Image.frombytes('RGB', (width, height), rand_pixels_as_bytes)

    draw_image = ImageDraw.Draw(random_image)
    draw_image.text(xy=(0, 0), text=text_and_filename, fill=(255, 255, 255))
    random_image.save("{file_name}.jpg".format(file_name=text_and_filename))

# Generate 42 random images: 
for _ in range(42):
    generate_random_image()

如果你想找一个没有核武器的方法这对我很有效

(python 3.6字节,您仍然需要枕头)

import random as r
from PIL import Image

dat = bytes([r.randint(1,3) for x in range(4500000)])
i = Image.frombytes('1', (200,200), dat)

如果图像只能是随机噪声,那么可以使用numpy.random生成数组,并使用PIL的Image.save保存它们。

这个例子可以扩展,包括避免模式重复的方法:

import numpy, Image

for n in xrange(10):
    a = numpy.random.rand(30,30,3) * 255
    im_out = Image.fromarray(a.astype('uint8')).convert('RGBA')
    im_out.save('out%000d.jpg' % n)

要获取jpeg图像,必须满足以下条件:

  1. 阵列需要成形(m,n,3)-三色,R G和B
  2. 每个元素(每个像素的每种颜色)必须是一个字节整数(uint,或8位无符号整数),范围从0到255。

另外,在不需要纯噪声的情况下,可以使用除纯随机性之外的其他方法来生成图像。

相关问题 更多 >