001.jpg
我有一个文件夹,里面装着一本书的扫描件,编号为092.jpg
扫描件将书的两页扫描在一起。我想要的是将它们从中间垂直分成两部分,并重新生成从001.jpg
到 的文件名184.jpg
。所以001.jpg
最初将被拆分为001.jpg
和002.jpg
。为了避免出现任何问题,我需要将目标文件写入另一个目录。
我发现 Imagemagick 可以做到这一点,尽管我认为我需要其他工具来管理它以批量处理所有这些图像。
有人可以帮我解决这个问题吗?
答案1
如果您有更新版本,ImageMagick
您可以通过以下方式批量处理图像magick
命令例如假设您正在目标目录中运行该命令(因此您的原始jpg
目录位于不同的目录中):
magick /path/to/*.jpg -scene 1 -crop 2x1@ +repage %03d.jpg
答案2
我不知道分割事物所需的 imagemagick 命令行,但这在这里也不是真正的问题,因为您已经找到了一种方法来做到这一点;我将GraphicsMagick
在这里使用;同样的想法也适用,只是我发现 ImageMagick 的命令行非常混乱。
所以,我要做的是:
#!/usr/bin/zsh
# this is a ZSH script. Would probably also work under bash, haven't tried.
targetdir=/home/Plato/newimgs
getwidth=gm identify -format '%w'
for number in {001..092}; do
infile="${number}.jpg"
width=$(getwidth) "${infile}"
leftnum=$((number * 2))
rightnum=$((leftnum + 1))
gm convert \
-crop "50%x100%+0+0" \
"${infile}" \
"${targetdir}/${(l:3::0:)leftnum}.jpg"
gm convert \
-crop "50%x100%+$((width / 2))+0" \
"${infile}" \
"${targetdir}/${(l:3::0:)rightnum}.jpg"
done
答案3
使用 imagemagick 的convert
:
#!/bin/bash
inputdir=/path/to/images
outputdir=$inputdir/out
mkdir -p "$outputdir"
cnt=0
for i in "$inputdir/"*.jpg; do
if convert "$i" -crop 50%x100% "$outputdir/%d.tmp"; then
printf -v fname '%03d.jpg' $((++cnt))
mv "$outputdir/0.tmp" "$outputdir/$fname"
printf -v fname '%03d.jpg' $((++cnt))
mv "$outputdir/1.tmp" "$outputdir/$fname"
else
echo "failed to convert $i" >&2
exit 1
fi
done
我还没有找到直接指定输出文件名的方法。