【问题标题】:How to copy an image line and insert it at specified positions n-times with imagemagick?如何使用imagemagick复制图像行并将其插入指定位置n次?
【发布时间】:2021-03-12 22:13:28
【问题描述】:

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

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

aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb
ccccccccccccccc
ccccccccccccccc
bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb
aaaaaaaaaaaaaaa

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

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

阅读imagemagick option summary 后,我不知道如何做到这一点。

因此,我们将不胜感激。

【问题讨论】:

  • 请显示您的输入图像和相应的预期输出图像。我不知道 "bbb line" 可能是什么。
  • 我能建议的最好的方法是编写一个脚本循环。在循环中,它将裁剪您要移动的 bbbb 线。然后在 bbbb 线之后拼接一条黑线,然后将裁剪的 bbbb 线合成到拼接的黑线中。参见 -crop、-splice、-composite

标签: imagemagick image-manipulation


【解决方案1】:

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

@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多