这是一个场景,我想创建一组随机的小jpg - 大小在50字节到8k之间 - 只要它们有效,jpeg的实际可视内容就无关紧要了。我需要生成一千个左右,并且它们都必须是唯一的 - 即使它们只是一个像素不同。我可以在那里写一个jpeg页眉/页脚和一些随机字节吗?我无法使用网络上的现有照片或照片集。
第二个问题是每次运行程序时图像集必须不同。
我更喜欢在python中这样做,因为包装脚本是在Python中。
我已经寻找python代码从头开始生成jpg,但没有找到任何东西,所以指向库的指针也一样好。
答案 0 :(得分:14)
如果图像只能是随机噪声,那么您可以使用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 :(得分:0)
如果你正在寻找一种方法来做到这一点,而不是numpy这对我有用
(python 3.6 for bytes,你还需要Pillow)
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)
答案 2 :(得分:0)
如果您不关心文件的内容,可以使用Pillow(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
//编辑:我认为OP想要生成有效的图像并且不关心它们的内容(这就是为什么我建议使用纯色图像)。这是一个生成带有随机像素的有效图像的函数,并且作为奖励将随机字符串写入生成的图像。唯一的依赖是Pillow,其他一切都是纯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()