有人能帮我吗?我想制作 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.jpg
、image_01_spine.jpg
、image_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++,您可以:
手动移除合并程序,随机文件.extra和文件.txt。
使用搜索→代替...(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
然后您可以切换到
Search Mode: Regular expression
消除包含_脊柱:
在上面的截图中,选中了所有以结尾的.+spine$
行。您也可以删除所有以结尾的行,留下类似以下内容: _spine
_back
.+back$
image_01
image_02
image_03
image_04
然后可以使用以下方法删除这些空白行:编辑→线路运营→删除空行,最终名单为文件.txt:
image_01 image_02 image_03 image_04
对于四行来说,这似乎效率低下,但既然你说你有超过 900 个项目,这些步骤的一些变化可能值得考虑。