Python 图像转换脚本可以正确转换某些文件,但不能正确转换其他文件

Python image conversion script converts some files properly but not others

我正在编写一个脚本来浏览一个装满图片的文件夹并做两件事。出于这个问题的目的,我只关注第一个。

这是将任何 .png 文件转换为 .jpg。

脚本如下

from PIL import Image
import os,sys

# Check if a filepath was provided
if len(sys.argv)!=2:
    print("Please enter one filepath")
    sys.exit(1)
else:
    directory=sys.argv[1]
    
number_pictures=0
number_errors=0

# converts any non .jpg file into a .jpg
def convert_to_jpg():
    name,ext = os.path.splitext(full_path)
    new_file_name=name+".jpg"
    try:
        with Image.open(full_path) as image:
            image.save(new_file_name)
    except OSError:
        print("ERROR!\nUnable to convert file: "+new_file_name)


def resizeImage():
    print("Hello")


# Iterates through the folder and calls the appropriate method/s based
# on certain characteristics.
for root, dirs, files in os.walk(directory,topdown=True,followlinks=False):
    for file in files:
        if file.endswith('.png'):
            full_path=root+file
            convert_to_jpg()
            number_pictures+=1

print(str(number_pictures))

请忽略 resizeImage 函数,因为它显然还没有准备好。

该脚本(大部分)有效并遍历文件路径中给定的文件。它确实尝试将文件夹中的每个文件都转换为 .jpg,但正如您在下面的图片中看到的,似乎只有大约一半的文件被正确转换。

如您所见,我的测试文件夹中包含 10 张各种名称的 .png 图片。有的有空格,有的全小写,有的大写。

在这里您可以看到在已处理的 9 个文件中(仍在弄清楚为什么未处理一个文件)有 5 个 return 错误。

图片文件夹中的结果是 9 个新文件(Capture.png 文件未处理),其中只有 4 个可以正常工作。带有绿色占位符图标的 .jpg 文件 return 元数据错误。

图片无法正常工作似乎没有任何韵律或原因,我对文件转换过程背后的过程了解不够,无法猜测发生了什么。

如有任何帮助,我们将不胜感激!

问题是缺乏关于图像在技术层面如何工作的细节方面的知识。

我从[此页面][4]了解到问题是由于图像文件中的 RGB 值不兼容(或缺少)所致。当我更改代码时

with Image.open(full_path) as image:
    image.save(new_file_name)

with Image.open(full_path).convert('RGB') as image:
    image.save(new_file_name)

它立即解决了问题。