ImageMagick에 많은 옵션을 전달하는 방법은 무엇입니까?

ImageMagick에 많은 옵션을 전달하는 방법은 무엇입니까?

저는 ImageMagick을 사용하여 많은 이미지를 합성하고 있습니다.

for counter in {1..$limit}
do
  partial=...
  x=...
  y=...
  convert $canvas
    $partial -geometry "+$x+$y" -composite
    $canvas
done

기본적으로 N개의 이미지를 한 번에 하나씩 정렬하고 있습니다.

이제 소규모이므로 $limit스크립트가 합리적인 시간 내에 실행됩니다. 하지만 $limit앞으로는 이미지 수가 수천 개로 늘어날 것입니다.

convert모든 부분을 한 번에 포함하는 명령을 작성할 생각입니다 . 그럼 한 번만 실행해 보세요 convert. ImageMagick 성명서그것은 테라비트로 작동할 수 있습니다이미지는 괜찮습니다. 따라서 수천 개의 작업을 동시에 할당하는 것은 문제가 되지 않을 것 같습니다.

문제는 쉘이 프로그램에 전달할 수 있는 인수의 수를 제한한다는 것입니다. 다른 수단(예: 스크립트 파일)을 통해 ImageMagick에 모든 매개변수를 전달할 수 있습니까? 이것이 나쁜 생각인가요?

답변1

매개변수를 파일에 전달하여 ImageMagick 옵션을 전달할 수 있습니다. @filename이 경우 ImageMagick은 전달된 파일에서 매개변수를 읽습니다.

~에서문서("파일 참조" 섹션 참조):

일부 ImageMagick 명령줄 옵션은 명령줄 프로세서의 기능을 초과할 수 있습니다. 예를 들어 Windows에서는 명령줄을 8192자로 제한합니다. 예를 들어, 그리기 옵션에 명령줄 길이 제한을 초과하는 다각형 점이 포함된 경우 그리기 옵션을 파일에 넣고 를 사용하여 파일을 참조합니다 @(예: ) .@mypoly.txt

따라서 이 기능은 명령줄 길이와 매개변수 수에 대한 제한을 제한하도록 특별히 설계되었습니다.

답변2

많이 넣어도 돼이미지 마술사스크립트에 명령을 입력하고 이를 실행하도록 지시합니다. 저는 여러분의 명령이 어떤 부분인지 잘 몰랐기 때문에 임의의 색상, 크기, 위치로 구성된 10,000개의 원을 그리기로 결정했습니다. 따라서 이를 특정 문제에 맞게 조정할 수 있기를 바랍니다.

스크립트는 다음과 같습니다.

#!/bin/bash

out="script.mgk"

# Define width and height of the image
W=512
H=512

# Create the initial canvas
echo "-size ${W}x${H} xc:" > $out

# Draw 10,000 randomly-sized, randomly-coloured circles on it
for ((i=0;t<=10000;t++)) ; do
   ((cx=$RANDOM % W))         # x-coordinate of circle centre
   ((cy=$RANDOM % H))         # x-coordinate of circle centre
   ((r=$RANDOM % 30))         # radius of circle
   ((cx2=cx+r))               # x-coordinate of point on circumference 
   ((red=$RANDOM %255))       # random red in range 0..255
   ((green=$RANDOM % 255))    # random green in range 0..255
   ((blue=$RANDOM % 255))     # random blue in range 0..255
   echo "-fill rgb(${red},${green},${blue}) -draw \"circle ${cx},${cy} ${cx2},${cy}\""
done >> $out

echo "-write result.png" >> $out

실행하면 script.mgk다음과 같은 파일이 생성됩니다.

-size 512x512 xc:
-fill rgb(44,228,226) -draw "circle 54,274 77,274"
-fill rgb(59,118,147) -draw "circle 242,231 258,231"
-fill rgb(70,91,229) -draw "circle 418,95 436,95"
-fill rgb(26,16,153) -draw "circle 148,128 148,128"
...
... thousands of lines omitted
...
-fill rgb(130,67,183) -draw "circle 15,326 23,326"
-fill rgb(152,79,104) -draw "circle 409,155 438,155"
-write result.png

이제 다음과 같이 실행할 수 있습니다.

magick -script script.mgk

여기에 이미지 설명을 입력하세요.


참고 1

스크립트 대신 명령줄에서 512x512 배경 이미지를 생성한 다음 스크립트를 실행하여 이전에 생성/로드한 이미지를 계속 처리할 수 있습니다.

magick -size 512x512 xc: -script script.mgk

노트 2

디스크에 임시 스크립트를 생성하고 명령을 직접 파이프라인으로 연결할 필요가 없습니다.이미지 마술사이와 같이:

for ((i=0;i<10;i++)) ; do
  echo "-draw ..."
done | magick -script -

더 좋은 예가 있습니다여기.

관련 정보