在 Photoshop 中合并包含 34,000 张图片的文件夹

在 Photoshop 中合并包含 34,000 张图片的文件夹

我有一个包含 34,000 张图像的文件夹(所有图像的大小完全相同),我想将它们全部层叠在一起,执行的操作相当于 Photoshop 的“深色”图层混合模式。

我认为操作不起作用,因为这些操作旨在对一批图像执行给定的操作。我需要类似“文件 > 脚本 > 将文件加载到堆栈”的操作。问题是,如果我尝试对整个文件夹执行此操作,Photoshop 就会挂起。

有没有办法将其变成自定义操作?如果可能的话,它可能会有所帮助,因为我可以在每次迭代中展平和合并图层,以避免产生包含 34,000 个图层的笨重文件。

如果有人知道如何使用 Imagemagick 来实现我的目标,我也愿意使用 Imagemagick...

答案1

我可以想象,由于涉及的文件数量太多,您将很难解决 Photoshop 挂起的问题。

但是,既然您表示愿意使用 Imagemagick。

这是一个 Python 脚本,它通过三个步骤完成此任务。

  1. 划分任务:不要一次性处理所有图像,而是将图像分组。例如,一次处理 100 张图像。
  2. 混合分块图像:使用 ImageMagick 混合每个块并生成结果图像。
  3. 混合结果图像:处理完所有块后,将结果图像混合在一起。
import os
import subprocess

IMAGE_FOLDER = '/path/to/images'  # Replace with your images path
CHUNK_SIZE = 100
OUTPUT_FOLDER = '/path/to/output'  # Replace with your desired output path

images = sorted(os.listdir(IMAGE_FOLDER))

chunk_images = [images[i:i + CHUNK_SIZE] for i in range(0, len(images), CHUNK_SIZE)]
resultant_images = []

for idx, chunk in enumerate(chunk_images):
    first_image = chunk[0]
    command = f'convert {os.path.join(IMAGE_FOLDER, first_image)}'

    for image in chunk[1:]:
        command += f' {os.path.join(IMAGE_FOLDER, image)} -compose darken -composite'

    output_image = os.path.join(OUTPUT_FOLDER, f'result_{idx}.png')
    command += f' {output_image}'
    subprocess.call(command, shell=True)
    resultant_images.append(output_image)

# Now blend the resultant images together
command = f'convert {resultant_images[0]}'

for image in resultant_images[1:]:
    command += f' {image} -compose darken -composite'

final_output_image = os.path.join(OUTPUT_FOLDER, 'final_result.png')
command += f' {final_output_image}'
subprocess.call(command, shell=True)

您将需要安装 ImageMagick 并从终端访问转换命令,并且您需要替换路径以适合您的本地设置。

答案2

好的,受到其他答案的启发,该答案部分有效但存在一些错误,我编写了自己的 Python 实现:

#!/usr/bin/env python3

import os
import subprocess

dir = [path to dir with all of the images]
targetdir = [path to target dir]
mylist = os.listdir(dir)

max = 34867
i = 0

while i <= 34867:
    try:
        cmd = ['convert', targetdir+'composite'+str(i)+'.png', dir+mylist[i] ,'-compose','darken','-composite',targetdir+'composite'+str(i+1)+'.png']
        subprocess.call(cmd, shell=False)
        print(i)
        os.remove(targetdir+'composite'+str(i)+'.png')
        i = i+1
    except:
        i = i-1
        print("hmm "+dir+mylist[i]+" didn't work")

您只需从序列中取出第一个文件,将其命名为“composite0.png”并将其放入目标目录中。然后将其撕开,并观察 stdout 中的数字。时不时出现 Imagemagick 错误,我需要解决这些问题,所以现在只是添加一个例外,直到我能找到这些问题的根源。

相关内容