JPEG 이미지가 많이 있습니다. 001abcd.jpg
,,, 잠깐만 요 002abcd.jpg
.
파일 이름을 캡처하여 이미지 자체의 모서리에 텍스트로 추가하고 싶습니다. 예를 들어, 결과는 파일의 003abcd.jpg
이미지 모서리에 "003abcd"가 인쇄되는 것입니다. (확장자는 없어도 됩니다.)
수백 개의 이미지를 일괄 처리하고 각 이미지에 자체 파일 이름을 추가할 수 있는 터미널 명령이 필요합니다.
저는 리눅스 민트 17을 사용하고 있습니다.
imagemagick이 유용하다는 것은 알지만 스크립팅을 이해하지 못합니다.
모든 이미지에 공통 텍스트를 배치하는 것은 쉽습니다. 그런데 해당 이미지의 고유한 파일 이름을 텍스트로 한 번에 가져오는 방법을 모르겠습니다.
답변1
mogrify
일괄 처리를 수행하므로 다음과 같은 것을 사용할 수 있습니다(글꼴, 크기, 색상, 위치 등을 취향에 맞게 변경).
mogrify -font Liberation-Sans -fill white -undercolor '#00000080' \
-pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
%t
확장자( )가 없는 파일 이름을 jpg
현재 디렉터리의 모든 s에 추가합니다. 예 orca-lm-1.jpg
:
파일을 덮어쓰게 되므로 백업 복사본이 있는지 확인하세요. 예를 들어 출력 파일에 다른 형식을 사용하는 경우
원본 파일은 변경되지 않습니다.png
mogrify -format 'png' -font Liberation-Sans -fill white -undercolor \
'#00000080' -pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
답변2
실제로 ImageMagick을 사용하여 쓸 수 있습니다.텍스트이미지로. 사용convert
이미지를 새 파일로 변환하는 유틸리티(또는 mogrify
파일을 그 자리에서 변환하지만 실수하면 원본 파일을 잃게 되므로 권장하지 않습니다). 다음을 사용하여 텍스트를 지정할 수 있습니다.-annotate
다음을 포함할 수 있는 옵션이스케이프 시퀀스예를 들어 %t
디렉터리나 확장자가 없는 파일 이름입니다. 위치, 크기, 글꼴, 색상 등을 제어할 수 있는 더 많은 옵션이 있습니다.
파일이 original
현재 디렉터리의 하위 디렉터리에 있다고 가정합니다. 디렉토리를 생성합니다 labeled
:
mkdir labeled
이미지를 변환하려면 convert
다음과 같이 호출하세요.
convert original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east labeled/001abcd.jpg
그 다음의 첫 번째 매개변수는 -annotate
텍스트의 위치를 나타내는 기하학입니다. +0+0
이것이 모퉁이입니다. -gravity north-east
이것이 오른쪽 상단 모퉁이라고 합시다. 두 번째 매개변수는 텍스트입니다. 여기서는 "파일 이름 사용"을 의미하는 이스케이프 시퀀스입니다.
.jpg
디렉터리의 모든 파일을 변환하려면 루프를 작성하세요. 와일드카드 패턴은 *.jpg
파일 목록을 나타내며 .jpg
이 루프는 디렉터리 .jpg
의 모든 파일에 대해 작동합니다 original
. 루프 본문에서는 "$x"
디렉토리 부분이 있는 파일 이름을 참조하고, "${x##*/}"
디렉토리 부분이 없는 파일 이름을 참조합니다.
for x in original/*.jpg; do
convert "$x" original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east "labeled/${x##*/}"
done