如何使用imagemagick复制图像行并在指定位置插入n次?

How to copy an image line and insert it at specified positions n-times with imagemagick?

我有一些基于像素的图像,我想通过以下方式使用 imagemagick 进行处理。

每张图片都遵循相同的像素线格式:

aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb
ccccccccccccccc
ccccccccccccccc
bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb
aaaaaaaaaaaaaaa

所以我想做的是复制第一行 bbbb 并将其插入到 c 行之前的最后 b 行之后和 c 行之后的最后 b 行之后。这将扩展图像高度。 这个过程要重复n次。

这意味着a和c线部分将保持不变,而b部分将放大图像的高度。

看完后imagemagick option summary我不知道如何做到这一点。

因此,我们将不胜感激。

感谢@fmw42,我可以编写以下解决方案的脚本,它获取图像大小,然后计算行数以将图像增加到 48/49 像素的高度。 首先,它在图像底部添加线条,然后在图像顶部添加相同数量的线条。同时保留 first/last 行。

@echo off
setlocal ENABLEDELAYEDEXPANSION
set image=Welcome1.gif
rem use %1 for comanndline argument

set image2=%TEMP%\temp1.gif
set image3=%TEMP%\temp2.gif

magick identify -format "%%w" %image% > %TEMP%\imwidth.txt
set /P width=<%TEMP%\imwidth.txt
del %TEMP%\imwidth.txt

magick identify -format "%%h" %image% > %TEMP%\imheight.txt
set /P height=<%TEMP%\imheight.txt
del %TEMP%\imheight.txt

set /A addlines=(49 - %height%) / 2
set /A lastline=%height% - 2

magick %image% -crop %width%x1+0+2 %TEMP%\copyLine.gif

rem Add lines at end of image
set image1=%image%
FOR /L %%i IN (1,1,%addlines%) DO (
  magick !image1! -background black -splice 0x1+0+%lastline% %image2%
  magick composite %TEMP%\copyLine.gif %image2% -geometry 99x1+0+%lastline% %image3%
  del %TEMP%\%image%
  ren %image3% %image%
  set image1=%TEMP%\%image%
)

rem Add lines at top of image
set image1=%TEMP%\%image%
FOR /L %%i IN (1,1,%addlines%) DO (
  magick !image1! -background black -splice 0x1+0+2 %image2%
  magick composite %TEMP%\copyLine.gif %image2% -geometry 99x1+0+2 %image3%
  del %TEMP%\%image%
  ren %image3% %image%
  set image1=%TEMP%\%image%
)
copy %TEMP%\%image% %image:~0,-4%touch.gif


del %TEMP%\copyLine.gif %TEMP%\temp1.gif %TEMP%\temp2.gif %TEMP%\%image%
endlocal
exit /b 0