无法使用 PIL 保存方法保存多个文件

Cannot save multiple files with PIL save method

我修改了一个 vk4 转换器以允许将多个 .vk4 文件转换为 .jpg 图像文件。当运行时,IDLE 没有给我报错,但它在结束进程前只设法转换了一个文件。我认为问题是 image.save() 似乎只影响单个文件,我未能成功循环该命令以扩展到目录中的所有其他文件。

代码:

import numpy as np
from PIL import Image
import vk4extract
import os

os.chdir(r'path\to\directory')
root = ('.\')
vkimages = os.listdir(root)

for img in vkimages:
    if (img.endswith('.vk4')):
        with open(img, 'rb') as in_file:
            offsets = vk4extract.extract_offsets(in_file)
            rgb_dict = vk4extract.extract_color_data(offsets, 'peak', in_file)

            rgb_data = rgb_dict['data']
            height = rgb_dict['height']
            width = rgb_dict['width']

            rgb_matrix = np.reshape(rgb_data, (height, width, 3))
            image = Image.fromarray(rgb_matrix, 'RGB')

            image.save('sample.jpeg', 'JPEG')

如何在使用PIL模块时防止转换后的文件被覆盖?

谢谢。

它正在保存每个文件,但由于您总是为每个文件提供相同的名称(image.save('sample.jpeg', 'JPEG')),因此只会保存最后一个文件,所有其他文件都会被覆盖。您需要为每个文件指定不同的名称。有几种方法可以做到这一点。一种是在使用 enumerate():

循环时添加索引
for i, img in enumerate(vkimages):

然后保存时在文件名上使用 i:

image.save(f'sample_{i}.jpeg', 'JPEG')

另一种方法是使用原始文件名和 replace 扩展名。从您的代码来看,这些文件看起来像是 .vk4 文件。所以另一种可能性是用相同的名称保存,但将 .vk4 替换为 .jpeg:

image.save(img.replace('.vk4', '.jpeg'), 'JPEG')