반복되는 워터마크 작업으로 고생하는 디자이너를 위해 웹페이지를 개발하는 동료 개발자를 위해 만들어본 Watermark FolderAction
하지만 디자이너의 기기는 macos가 아니었다고 합니다 🥲
폴더액션이란?
macOS는 자동화 도구인 Automator를 내장하고 있습니다.
Automator를 다양한 자동화 작업을 생성할 수 있게 해 주는데,
폴더액션은 Automator의 주요 기능 중 하나로,
특정 폴더에 변화가 생길 때 자동으로 작업을 실행하도록 할 수 있습니다.
imagemagick 설치하기
Automator에서도 이미지에 대한 일부 작업을 제공하지만,
워터마크를 적용하기 위해서는 다른 도구의 힘을 빌려야 합니다.
ImageMagick은 폴더액션과 함께 워터마크를 추가하는 데 매우 적합한 도구입니다.
강력한 오픈소스 이미지 처리 도구로,
명령어를 통해 터미널이나 스크립트에서 쉽게 이미지 처리를 할 수 있습니다.
터미널에서 Homebrew를 통해 간단히 설치할 수 있습니다.
zsh
brew install imagemagick
설치가 완료되면 터미널에서 다음 명령어를 이용해 imagemagick의 경로를 확인합니다.
이 경로는 뒤에서 필요하기 때문에 잘 메모해 둡니다.
zsh
which imagemagick
제 환경에서의 경로는 다음과 같았습니다.
zsh
# /opt/homebrew/bin/magick
폴더액션 생성하기
- Spotlight 검색에서 Automator를 열어줍니다.
2.폴더 적용 스크립트를 선택합니다.
- 적용할 폴더를 선핵합니다. ( ‘기타’ 클릭 후 폴더 선택 )
- '선택된 Finder 항목 가져오기'와 '셸 스크립트 실행'을 작업 공간에 넣어줍니다.
Cmd + s
로 저장 후 Spotlight에서 ‘폴더 적용 스크립트 설정’을 확인해보면 설정이 적용되었음을 확인할 수 있습니다.
워터마크 적용하기
다시 Automator로 돌아와서, 셸 스크립트를 작성합니다.
위에서 메모해둔 imagemagick 경로와,
워터마크로 사용할 파일의 경로를 이용해 스크립트를 작성합니다.
zsh
for file in "$@"; do
if [[ "$file" =~ \.(jpg|jpeg|png)$ ]]; then
# 파일명에 _watermarked가 이미 포함되어 있는지 확인
filename=$(basename "$file")
if [[ "$filename" == *"_watermarked"* ]]; then
# 이미 처리된 파일이므로 건너뜀
continue
fi
# which magick 으로 확인한 imagemagick 경로
MAGICK="/opt/homebrew/bin/magick"
# 워터마크로 적용할 파일 경로
WATERMARK="/Users/my/Desktop/watermark.png"
# 위치 (center, northwest, southeast 등)
GRAVITY="center"
# 투명도
OPACITY="50%"
# 원본 파일의 확장자와 경로
extension="${file##*.}"
filepath="${file%.*}"
# 워터마크 적용
"$MAGICK" \
composite -gravity "$GRAVITY" -dissolve "$OPACITY" \
"$WATERMARK" "$file" "${filepath}_watermarked.${extension}"
fi
done
타일패턴으로 워터마크 적용하기
다음과 같이 타일 패턴을 생성한 후, 워터마크로 적용할 수도 있습니다.
zsh
for file in "$@"; do
if [[ "$file" =~ \.(jpg|jpeg|png)$ ]]; then
# 파일명에 _watermarked가 이미 포함되어 있는지 확인
filename=$(basename "$file")
if [[ "$filename" == *"_watermarked"* ]]; then
# 이미 처리된 파일이므로 건너뜀
continue
fi
# which magick 으로 확인한 imagemagick 경로
MAGICK="/opt/homebrew/bin/magick"
# 워터마크로 적용할 파일 경로
WATERMARK="/Users/smartscore/Desktop/watermark.png"
# 위치
GRAVITY="center"
# 투명도
OPACITY="100%"
# 원본 파일의 확장자와 경로
extension="${file##*.}"
filepath="${file%.*}"
# 원본 파일의 크기
ORIG_WIDTH=$("$MAGICK" identify -format "%w" "$file")
ORIG_HEIGHT=$("$MAGICK" identify -format "%h" "$file")
# 타일 워터마크 생성
"$MAGICK" convert -size "$ORIG_WIDTH"x"$ORIG_HEIGHT" \
tile:"$WATERMARK" /tmp/tiled_watermark.png
# 워터마크 적용
"$MAGICK" \
composite -gravity "$GRAVITY" -dissolve "$OPACITY" \
/tmp/tiled_watermark.png "$file" "${filepath}_watermarked.${extension}"
# 임시 파일 삭제
rm /tmp/tiled_watermark.png
fi
done
주의사항 및 문제해결
- 워터마크 이미지는 PNG 포맷의 투명 배경을 사용하세요
- ImageMagick의 옵션들은 적용 순서에 따라 결과가 달라질 수 있습니다
- 폴더액션이 작동하지 않을 경우 폴더 권한을 확인해보세요
- 워터마크가 적용된 이미지의 원본은 가급적 삭제하거나 다른 폴더로 이동시키세요
기타 imagemagick 스크립트
imagemagick을 통해 이미지 회전이나 타일의 간격 설정 등 다양한 작업을 할 수 있습니다.
이를 잘 조합하여 폴더 액션을 생성해 보세요.
좌측상단에서 50px 50px에 워터마크 적용
zsh
magick composite -geometry +50+50 /경로/워터마크이미지.png 원본이미지.jpg 결과이미지.jpg
우측하단에 워터마크 적용
zsh
magick composite -gravity southeast /경로/워터마크이미지.png 원본이미지.jpg 결과이미지.jpg
워터마크 회전
zsh
magick convert /경로/워터마크이미지.png -background none -rotate 45 /tmp/rotated_watermark.png
워터마크 타일 생성
zsh
# 워터마크 크기 확인
WMARK_WIDTH=$(magick identify -format "%w" /경로/워터마크이미지.png)
WMARK_HEIGHT=$(magick identify -format "%h" /경로/워터마크이미지.png)
# 원하는 반복 횟수 설정 (가로 3개, 세로 2개)
REPEAT_X=3
REPEAT_Y=2
TILE_WIDTH=$(( WMARK_WIDTH * REPEAT_X ))
TILE_HEIGHT=$(( WMARK_HEIGHT * REPEAT_Y ))
magick convert -size "$TILE_WIDTH"x"$TILE_HEIGHT" tile:/경로/워터마크이미지.png /tmp/tiled_watermark.png