XMP图像预设和转换

2024-06-02 05:27:41 发布

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

我经常处理大量的照片。我希望应用一个通用的XMP预设(为cr2文件在camera raw中开发)

最初,我考虑使用ap ython模块应用预设,然后使用rawpy将图像从cr2转换为jpeg。这不起作用,我做的很多研究指出,由于复杂的镜头校正等原因,这些模块无法处理模块内的xmp应用程序

然后我想到的是手动查看这个过程,看起来好像当我将这些XMP应用于cr2文件时,所发生的一切就是XMP文件被复制和重命名,以适应相应cr2(原始)文件的文件名

所以我想,为什么不编写一个代码,在每个文件中复制它,然后在XMP文件与原始文件匹配后进行原始转换呢

我在原始文件上运行此代码后的预览在bridge中工作得非常好,因此我可以看到它们被复制并正确应用于cr2文件

我的问题是,有没有一种方法可以处理手头的cr2文件

我在代码中写了一个sleep,让它有时间应用预设,如下所示

import os
import shutil
import PIL
import rawpy
import imageio
from PIL import Image
import time


xmp_preset = "path/to/PRESET.xmp"
raw_sorted = "path/to/RAW/"
jpg_output = "path/to/JPEG/"

for f in sorted(os.listdir(raw_sorted)):
    f_name,f_ext = (os.path.splitext(f))
    xmp_name01 = ('{}{}'.format(f_name,".xmp"))


    if os.path.exists(".DS_Store"):
        os.remove(".DS_Store")
    if os.path.exists("Thumbs.db"):
        os.remove("Thumbs.db")

    if f.endswith(".cr2"):
        shutil.copy(xmp_preset, raw_sorted)
        os.rename(raw_sorted + "PRESET.xmp", raw_sorted + xmp_name01)



time.sleep(10)

for f in os.listdir(raw_sorted):
    if f.endswith(".cr2"):
        f_name, f_ext = os.path.splitext(f)
        filepath = os.path.join(raw_sorted,f)
        jpegext = ".jpg"
        with rawpy.imread(filepath) as raw:
            rgb = raw.postprocess(use_camera_wb=True,gamma=None)
            path = os.path.join(jpg_output,f_name)
            newname = ("{}{}".format(path,jpegext))

            imageio.imwrite(newname,rgb)

代码工作得很好,它将XMP文件带过,正确地重命名它,我可以看到它已经被应用,但是,当jpeg输出到定义的文件夹时,它就这样做了,就好像XMP从来都不是一个因素一样

有没有办法使用应用的XMP输出jpeg文件?我尝试使用rawpy参数来尽可能接近所需的外观,但这并不正确


Tags: 模块文件path代码nameimportrawif