수직 타일 워터마크를 중앙에 배치하는 방법

수직 타일 워터마크를 중앙에 배치하는 방법

저는 imagemagick을 사용하여 사진에 워터마크를 추가합니다. 명령줄은 다음과 같습니다.

composite -tile -gravity center watermark.png somefile.jpg somefile.jpg

그러나 워터마크는 수직 중앙에 위치하지 않습니다. 다음과 같습니다.

워터마크가 있는 이미지

중앙에서 시작하고 싶습니다. 어떻게 해야 합니까?

답변1

먼저 기본 이미지와 워터마크 이미지의 크기를 가져옵니다.

#!/bin/bash
infile="$1"
outfile="$2"
wmfile="watermark.png"
basew=`identify -format '%w' "$infile"`
baseh=`identify -format '%h' "$infile"`
wmw=`identify -format '%w' "$wmfile"`
wmh=`identify -format '%h' "$wmfile"`

그런 다음 기본 이미지에 배치할 수 있는 완전한 타일 수를 계산합니다.

tilew=$(($basew / $wmw * $wmw))
tileh=$(($baseh / $wmh * $wmh))

이것은 정수 산술을 사용하므로 곱셈이 나눗셈을 취소하지 않습니다. 예를 들어 보겠습니다. 기본 이미지가 100x100이고 타일 이미지가 34x34인 경우 어느 축에도 세 번째 타일을 완전히 맞출 수 없기 때문에 68x68이 됩니다.

여기서는 Bash 기능을 사용하여 쉘 스크립트에서 산술 연산을 수행하고 있습니다. 다른 셸에서 이 작업을 수행해야 하는 경우 외부에서 호출 bc하거나 dc계산을 수행할 수 있습니다.

이제 얼마나 크게 설정할 수 있는지 알았으므로 기본 이미지 크기와 동일한 프레임을 중심으로 워터마크 이미지의 타일 임시 버전을 만듭니다.

wmtemp=`mktemp /tmp/wm-XXXXXX.png`
convert -background 'rgba(0,0,0,0)' -size "$tilew"x"$tileh" \
    tile:"$wmfile" -gravity center -extent "$basew"x"$baseh" \
    png32:$wmtemp

이렇게 하면 워터마크 이미지가 RGBA 형식이 아닌 경우 강제로 RGBA 형식이 됩니다. 또한 이 -background 'rgba(0,0,0,0)'지시문이 입력 이미지 앞에 와야 기본 흰색 배경에 타일링 작업을 수행하지 않는 것이 중요합니다 .

하지만 여기서 진짜 비결은 -size및 지시문에 -extent서로 다른 값을 사용한다는 것입니다. 우리는 더 작은 타일 이미지를 만든 다음 기본 이미지의 크기와 일치하도록 필요에 따라 패딩합니다. 타일 ​​이미지 크기가 기본 이미지 크기로 균등하게 나누어지면 괜찮습니다. 타일 세트를 중앙에 배치하기 위해 추가 패딩을 추가할 필요가 없습니다.

마지막으로 임시 타일 워터마크가 원본 이미지 위에 배치됩니다.

composite "$wmtemp" "$infile" "$outfile"
rm "$wmtemp"

관련 정보