使用ImageMagick批量分割JPEG

时间:2015-03-31 10:34:08

标签: batch-file imagemagick dos

我使用以下命令在生成两个文件的文件夹中裁剪和分割jpg名称page000.jpg

convert page000.jpg -crop 2x1@ +repage -colorspace gray ^
        +dither -colors 4 page000_%d.jpg

这两部分将命名为page000_0.jpg和page000_1.jpg

它运行良好,但我想重写此代码以处理目录中的每个JPEG。

我为DOS(.bat)编写了这个批处理代码:

mkdir split
FOR %%f IN (*.jpg) DO xcopy %%f split\
cd split
FOR %%f IN (*.jpg) DO convert %%f -crop 2x1@ +repage -colorspace gray ^
                              +dither -colors 4 %%f_%d.jpg

然而,它无法正常工作。

2 个答案:

答案 0 :(得分:2)

您需要转义需要解释的百分号,而不是批量解析器,而是转换解析器。

set "parameters=-crop 2x1@ +repage -colorspace gray +dither -colors 4"
FOR %%f IN (*.jpg) DO convert "%%f" %parameters% "%%~nf_%%d.jpg"
                                                        ^^ the escaped percent sign

但是,由于for命令不使用静态文件列表(在for命令迭代时检索列表),因此也可以处理在该过程中生成的文件。要解决它,你可以

1 - 使用静态列表将for命令更改为for /f命令,以首先使用dir命令检索文件列表

for /f "delims=" %%f in ('dir /b /a-d *.jpg') do .....

2 - 处理原始目录中的输入文件,并将输出放在split目录中。这样,由于生成的文件未放置在正在处理的同一文件夹中,因此不会检测到它们。

mkdir split
set "parameters=-crop 2x1@ +repage -colorspace gray +dither -colors 4"
FOR %%f IN (*.jpg) DO convert "%%f" %parameters% "split\%%~nf_%%d.jpg"

答案 1 :(得分:0)

您无需将文件复制到split子目录,您可以convert从它们所在的位置读取它们:

for %f in (*.jpg) do convert %f -crop 2x1@ +repage -colorspace gray +dither -colors 4 split/%~nf_%d.jpg