python - PIL仅保存第一张图像

标签 python python-imaging-library

我正在尝试进行一些批量图像处理,但在创建图像后保存图像时遇到问题。这是全部代码:

import Image
import os
import random

training_images = []
training_path = 'cropped'
background_images = []
background_path = 'background'
training_file = 'train'

def get_image_list(file_path):
    return os.listdir(file_path)

def rotate_randomely(im):
    number = random.randint(1, 6)
    if number == 1:
        return im.transpose(Image.FLIP_LEFT_RIGHT)
    elif number == 2:
        return im.transpose(Image.FLIP_TOP_BOTTOM)
    elif number == 3:
        return im.transpose(Image.ROTATE_90)
    elif number == 4:
        return im.transpose(Image.ROTATE_180)
    elif number == 5:
        return im.transpose(Image.ROTATE_270)
    else:
        return im

def get_random_point(maxX, maxY):
    x = random.randint(0, maxX)
    y = random.randint(0, maxY)
    return x, y 

def insert_image(from_image, onto_image):

    from_image = resize_smaller(from_image, onto_image.size)
    x, y = get_random_point(onto_image.size[0] - from_image.size[0], onto_image.size[1] - from_image.size[0])
    onto_image.paste(from_image, (x, y))
    width = from_image.size[0]
    height = from_image.size[1]
    return x, y, width, height

def resize_smaller(image, maxXY):
    if image.size[0] > maxXY[0] or image.size[1] > maxXY[1]:
        image = image.resize((image.size[0] / 2, image.size[1] / 2))
    if image.size[0] > maxXY[0] or image.size[1] > maxXY[1]:
        resize_smaller(image, maxXY)
    else:
        return image

training_images = get_image_list(training_path)
background_images =  get_image_list(background_path)
print('training_images size', len(training_images))
print('background_images size', len(background_images))

for training_image in training_images:
    index = 0
    for background_image in background_images:
        name = background_image
        training_image = Image.open(training_path + '/' + training_image)
        background_image = Image.open(background_path + '/' + background_image)
        training_image = rotate_randomely(training_image)
        x, y, width, height = insert_image(training_image, background_image)
        background_image.save('images/' + str(index) + name)
        index = index + 1

输出: ('训练图像大小', 7) ('背景图像大小', 1)。所以它正确地找到了图像,但是当我查看结果时,只保存了一张图像,并且图像名称前面只有一个 0。但我知道它遍历了每张图像,因此应该有七个。

我已经研究这个问题有一段时间了,但我只是不明白我哪里出了问题。 pil 的 save 方法有什么我不知道的奇怪之处吗?

最佳答案

index = 0放在上面的for循环之外,否则每次迭代它都会变成0并保存在旧文件的顶部。

关于python - PIL仅保存第一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409828/

相关文章:

python - 将加密文件存储在数据库中

python - 如何使用PIL绘制圆弧?

Python PIL - 不透明度 > 0 的所有 PNG 区域都将其不透明度设置为 1

macos - ImportError : no module named Image, ImportError : no module named PIL -- Python, Anaconda,PIL, Pillow ,mac 10.10.3,

python - 如何在 Pyramid Web 框架中设置内容类型 header 以响应特定文件类型

python - 如何在模型过滤器中过滤日期时间的工作日?

python - Django:向 UserCreationForm 添加其他字段

python - pytest 属性错误 : 'Function' object has no attribute 'get_marker'

python - 使用 PIL 创建多行文本

python - 使用 Pygame 加载更新的图像