【问题标题】:Combining images from folder two by two in imagemagick在imagemagick中将文件夹中的图像两两合并
【发布时间】:2016-02-08 11:03:40
【问题描述】:

在 imagemagick 中两两合并文件夹中的图像。

你好,

我有一个包含如下图片的文件夹:

  • image1.jpg
  • image2.jpg
  • image3.jpg
  • alphaplupp.jpg
  • kj56.jpg
  • rumiba54.jpg

如何使用 imagemagick 像这样水平合并它们:

  • image1.jpg+image2.jpg
  • image3.jpg+alphaplupp.jpg
  • kj56.jpg+rumiba54.jpg

维萨

【问题讨论】:

  • Windows 或带有bash 的真实操作系统?应该调用什么输出文件?图片大小一样吗?
  • 您好。不幸的是,我现在被 Windows 困住了。例如,输出文件可以称为 image1-image2.jpg。不,图像大小不同。当它们水平组合时,它们应该是相同的高度,但不需要相同的宽度。
  • 你是什么意思“他们应该是相同的高度”?它们的高度是否相同,或者您是否也希望此脚本使它们相同?
  • 我的意思是在输出中 2 个图像应该具有相同的高度。相同的宽度无关紧要。 2 个输入图像的高度可能不同。

标签: imagemagick


【解决方案1】:

我通常不编写 BATCH 文件,但这对我有用 - 可能有更好的方法...

@ECHO OFF
REM Combine images side-side pairwise from the current directory using ImageMagick
REM Images are assumed to be named file1.jpg, file2.jpg, file3.jpg
REM Images are resized to a common height, as specified on next line
SET HEIGHT=500
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%A in (1,2,1000) DO (
   SET /A "B=%%A+1"
   SET _f1=file%%A.jpg
   SET _f2=file!B!.jpg
   IF NOT EXIST "!_f1!" GOTO BRK
   IF NOT EXIST "!_f2!" GOTO BRK
   SET _result=joined%%A_!B!.jpg
   ECHO Joining !_f1! and !_f2! into !_result!
   convert "!_f1!" "!_f2!" -resize x%HEIGHT% +append "!_result!"
)
:BRK

我不知道你如何在 Windows 中执行 while 循环,所以我使用的是 for 循环。我猜你的文件不超过 1,000 个。如果这样做,请增加第三行的 1,000。您可以在脚本顶部更改图像大小调整到的常用高度。

一般来说,如果您想布置名称不符合您的fileXYZ.jpg 命名标准的两张图像,假设它们是imageA.jpgimageB.jpg,并排在一起,并将它们的大小调整为 500 像素高和另存为result.jpg 你会这样做

convert imageA.jpg imageB.jpg -resize x500 result.jpg

【讨论】:

  • 所以,这是一个很好的开端,我认为问题已经解决了 75%。但是,输出图像的高度不同。此外,文件夹中的某些文件名具有不同的命名方案,比如 alphadkg.jpg、knj123.jpg,我想知道如何相应地加入所有文件,而不管文件名如何?
  • 我添加了一个 HEIGHT 变量,所有图像在合并之前都调整为该高度。
  • 这种方法不太适合加入名称迥异的文件 - 我怎么可能知道 monkeybrains357.jpg 需要与 freddyfox53.jpg 加入?
  • 我明白了。实际上,目前,我对这种情况很满意。如果有什么我可以为您做的,请告诉我:)非常感谢您编写批处理脚本!
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2018-01-19
  • 2012-10-10
相关资源
最近更新 更多