windows批处理中的imagemagic tile编号

时间:2015-10-03 23:51:49

标签: batch-file imagemagick

以下snipet工作正常,并在/ sliced子文件夹中创建切片。

FOR %%a in (C:\someFolder\*.png) DO (
  ECHO Processing file: "%%~nxa"    
  convert %%a -crop 3x3@  +repage  +adjoin  %~dp0\sliced\%%~na.png
)    

然而,生成的瓷砖的编号很难看。它的形式如下:FileName-0.png,FileName-1.png,

我想从1开始并使用下划线,如:FileName_1.png,FileName_2.png, 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

我以后无法对此进行测试,但我认为您可以将场景编号设置为1,如下所示:

convert image.jpg -crop ... -scene 1 ...

这应该使编号从1开始而不是0.

另外,如果你将%d放在输出文件名中,它会将场景编号放在那里,所以你可能想要

convert image.jpg -crop ... -scene 1 ... file_%d.jpg

您可能需要将Windows糟糕的批处理语言中的百分号加倍,或者可能在它前面放置一个插入符号^。我认为这是你需要的插入符号......

以下是将9x9像素的灰度图像切割成图块的示例:

convert xc:gray[9x9] -crop 3x3@ -scene 23 +repage file_%d.png

生成的文件

-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_23.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_24.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_25.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_26.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_27.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_28.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_29.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_30.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:18 file_31.png

如果您希望场景编号为零填充,请使用%04d,例如:

convert xc:gray[9x9] -crop 3x3@ -scene 23 +repage file_%04d.png

生成的文件

-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0023.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0024.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0025.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0026.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0027.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0028.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0029.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0030.png
-rw-r--r--  1 mark  staff  263  4 Oct 11:21 file_0031.png

事实上,你可以通过这样使用for loop来避免整个丑陋的mogrify,延迟扩展,双百分比,感叹号混乱的Windows:

mogrify -crop 3x3@ -scene 34 -path sliced *png

如果您当前目录中有a.pngb.png的文件,则会导致:

sliced/a-34.png
sliced/a-35.png
sliced/a-36.png
sliced/a-37.png
sliced/a-38.png
sliced/a-39.png
sliced/a-40.png
sliced/a-41.png
sliced/a-42.png
sliced/b-34.png
sliced/b-35.png
sliced/b-36.png
sliced/b-37.png
sliced/b-38.png
sliced/b-39.png
sliced/b-40.png
sliced/b-41.png
sliced/b-42.png

我认为你不能用mogrify来实现下划线和零填充。但你仍然可以像我在答案开始时所说的那样使用convert

在Windows中,您可能需要加倍百分号,或者使用插入符^进行转义 - 不确定那里的疯狂语法。

答案 1 :(得分:0)

setlocal enabledelayedexpansion
set count=1
for %%a in (C:\someFolder\*.png) do (
  echo processing file: !count!: "%%~nxa"    
  convert %%a -crop 3x3@ +repage +adjoin %~dp0sliced\%%~na_!count!.png
  set /a count+=1
)

使用前导零,实际上是3位数字,如果您需要4位数字,请将!lz:~-3!更改为!lz:~-4!

setlocal enabledelayedexpansion
set count=1
for %%a in (C:\someFolder\*.png) do (
  set lz=0000!count!
  echo processing file: !lz:~-3!: "%%~nxa"    
  convert %%a -crop 3x3@ +repage +adjoin %~dp0sliced\%%~na_!lz:~-3!.png
  set /a count+=1
)