이미지를 수직으로 반으로 일괄 분할하고 출력 파일에 순차적으로 번호를 매깁니다.

이미지를 수직으로 반으로 일괄 분할하고 출력 파일에 순차적으로 번호를 매깁니다.

001.jpg번호가 매겨진 책의 스캔본이 포함된 폴더가 있습니다.092.jpg

스캔은 책의 두 페이지를 함께 스캔합니다. 내가 원하는 것은 중간에서 수직으로 두 부분으로 나누고 001.jpg파일 이름을 에서 184.jpg. 따라서 처음에는 sum 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

출력 파일 이름을 직접 지정하는 방법을 찾지 못했습니다.

관련 정보