如何批量将 2 张文件名相同的图片合并为一张?有没有程序可以做到这一点?

如何批量将 2 张文件名相同的图片合并为一张?有没有程序可以做到这一点?

有人能帮我吗?我想制作 DVD 封面合集。我有多张用于不同封面的图片和多张用于不同书脊字体的图片。每个封面 .jpg 都与其对应的 Spine Jpg 同名。我只需要知道如何批量合并这些图片,因为我有 900 张,一张一张地将它们合并在一起会花很长时间。有没有一个程序可以以最少的麻烦完成这项工作?我主要使用 Photoshop,但我还没有找到这样做的方法。

答案1

你最好的选择可能是使用图像魔术师(这是一个跨平台程序,用于从命令行操作图像)和一些自定义脚本。话虽如此,我不确定这对你来说是否是一个“最少麻烦”的解决方案

如果你有兴趣尝试 ImageMagick,你可以从下载页面,不过您可能需要滚动一下才能找到适合您的版本。您没有提到您使用的是哪种操作系统,但对于 Windows 来说,默认Q16-x64版本应该没问题。

使用 ImageMagick

一旦安装了 ImageMagick,您就可以使用该convert实用程序来合并图像。

假设我们有一组标记为的图像图片正面.jpg图片背面.jpg图片_spine.jpg并且它们的高度都一样,我们可以convert使用+追加水平缝合在一起的选项:

convert image_front.jpg image_spine.jpg image_back.jpg +append image_combined.jpg

在这种情况下,图像合并.jpg是我们按顺序由给定的图像组成的最终封面。


Windows 转换

请注意,Windows 有一个内置convert命令,与 ImageMagick 无关。如果您使用 Windows 时不小心,这可能会造成一些混乱或其他小问题。

无论如何,如果您希望在 Windows 上使用 ImageMagickconvert实用程序(如上所示),则需要注册 ImageMagick 安装文件夹(前任. C:\path\to\imagemagick) 在您的 WindowsPath环境变量中。

convert否则,每次调用它时都需要指定完整路径(前任。 C:\path\to\imagemagick\convert.exe)。


自动化

由于 ImageMagick 通过命令行工作,因此它可以通过脚本实现自动化。虽然有多种方法可以实现这一点,但我在下面提供了一个使用 Windows 批处理的简单示例。

为了保持一致性,我将使用与之前示例类似的命名方案convert。我还假设所有要转换的文件也出现在同一个初始目录中。

批处理解决方案示例

对于此示例,第一步是创建一个“基本”文件名列表(“扩展名”如_front.jpg_spine.jpg_back.jpg将被添加到批处理脚本中)。

您可以随意命名此列表,但我将其称为文件.txt假设封面图片为image_01_front.jpgimage_01_spine.jpgimage_01_back.jpg等,有四组图片,文件.txt将包含以下内容:

image_01
image_02
image_03
image_04 

请注意,此列表不应有重复项。同样,不应有空行。假设满足这些要求,则可以将此列表用作以下示例批处理文件的输入:

@echo off

@rem Create some folders to hold our images after processing.
if not exist processed mkdir processed
if not exist combined mkdir combined

@rem We use %%~A below to access the strings returned from our list.
@rem %cd% is a special variable representing the current directory.

@rem For each item in our list...
for /f "usebackq delims=" %%A in ("%cd%\files.txt") do (

  @rem Use ImageMagick to combine our images.
  @rem We are concatenating strings here (%%~A and e.g. "_front.jpg").
  @rem This is the same as writing ex. "image_01_front.jpg".

  convert %%~A_front.jpg %%~A_spine.jpg %%~A_back.jpg +append %%~A_combined.jpg

  @rem Sort our images to the appropriate local folders after conversion.
  move %%~A_front.jpg .\processed
  move %%~A_spine.jpg .\processed
  move %%~A_back.jpg .\processed
  move %%~A_combined.jpg .\combined

)

echo Script completed.
pause

该脚本可以保存为例如合并程序。假设此批处理文件位于与文件.txt(以及该文件中列出的图像),应该可以双击合并程序并让它处理列表中的所有图像(假设一切顺利)。

脚本说明

  • 显然,给出的脚本只是一个例子。它可能需要根据您的具体情况/需求进行一些调整。

  • 目前,示例批处理文件不会递归子目录。

  • ("%cd%\files.txt")可以用例如替换("C:\path\to\files.txt")

  • %%~A非常值得注意,因为它最终代表了(依次)列出的每个字符串文件.txt

  • 虽然确切的文件名不太重要(convert/+append命令可以采用几乎任意名称),但对于自动化来说,它们应该具有一致的结构。如果您需要在 Windows 上一次更改大量文件名,您可能会对以下内容感兴趣批量重命名实用程序

  • 虽然批处理是可以通过的,但我建议的另一种语言是Python。它是跨平台的,虽然处理文件需要更多的代码,但在许多其他方面它比批处理更可取。


生成文件列表

实际的文件列表可能比四个基本项目更难生成。虽然它不会生成上述示例所需的确切内容,但如果您使用的是 Windows,则可以在命令提示符下创建一个仅包含文件名和扩展名的列表,该dir /b > files.txt命令提示符打开到与图像文件相同的目录。在大多数情况下,这将使您至少完成 50% 的工作。

同样,第三方文本编辑器,如记事本++(Windows)可以具有有用的功能。就 Notepad++ 而言,它支持常用表达以及普通的文本替换。因此,例如:

image_01_back.jpg
image_01_front.jpg
image_01_spine.jpg
image_02_back.jpg
image_02_front.jpg
image_02_spine.jpg
image_03_back.jpg
image_03_front.jpg
image_03_spine.jpg
image_04_back.jpg
image_04_front.jpg
image_04_spine.jpg
merge.bat
randomfile.extra
files.txt

进入:

image_01
image_02
image_03
image_04

对于 Notepad++,您可以:

  1. 手动移除合并程序随机文件.extra文件.txt

  2. 使用搜索代替...Ctrl+ H)通过空白替换消除扩展名(.eg .jpg),以及_front为批处理脚本提供一组基本名称:

     image_01_back
    →image_01
     image_01_spine
     image_02_back
    →image_02
     image_02_spine
     image_03_back
    →image_03
     image_03_spine
     image_04_back
    →image_04
     image_04_spine
    
  3. 然后您可以切换到Search Mode: Regular expression消除包含_脊柱

Notepad++ 正则表达式替换

在上面的截图中,选中了所有以结尾的.+spine$行。您也可以删除所有以结尾的行,留下类似以下内容: _spine_back.+back$

    image_01

    image_02

    image_03

    image_04
  1. 然后可以使用以下方法删除这些空白行:编辑线路运营删除空行,最终名单为文件.txt

    image_01
    image_02
    image_03
    image_04
    

对于四行来说,这似乎效率低下,但既然你说你有超过 900 个项目,这些步骤的一些变化可能值得考虑。

相关内容