批量将图像垂直分成两半,按顺序对输出文件进行编号

批量将图像垂直分成两半,按顺序对输出文件进行编号

001.jpg我有一个文件夹,里面装着一本书的扫描件,编号为092.jpg

扫描件将书的两页扫描在一起。我想要的是将它们从中间垂直分成两部分,并重新生成从001.jpg到 的文件名184.jpg。所以001.jpg最初将被拆分为001.jpg002.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

我还没有找到直接指定输出文件名的方法。

相关内容