이미지 파일 생성 날짜를 이미지 자체에 쓰려면 (원하는 것이 아닌 경우 질문을 편집 하십시오)을 사용할 수 있습니다 imagemagick
.
아직 설치되지 않은 경우 ImageMagick을 설치하십시오.
sudo apt-get install imagemagick
각 사진과 사용의 생성 날짜 얻을 것이다 떠들썩한 파티 루프 실행 convert
로부터 imagemagick
이미지를 편집하는 제품군을 :
for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 22 \
-fill white -annotate +30+30 %[exif:DateTimeOriginal] "time_""$img";
done
라는 이름의 각 이미지 에 대해 오른쪽 하단에 타임 스탬프가 foo.jpg
있는 사본이 생성됩니다 time_foo.jpg
. 여러 파일 형식과 멋진 출력 이름에 대해보다 우아하게 수행 할 수 있지만 구문은 조금 더 복잡합니다.
좋아, 그것은 간단한 버전이었다. 나는 더 복잡한 상황, 하위 디렉토리의 파일, 이상한 파일 이름 등을 처리 할 수있는 스크립트를 작성했습니다. 아는 한 .png 및 .tif 이미지 만 EXIF 데이터를 포함 할 수 있으므로 다른 형식으로 실행할 필요가 없습니다. . 그러나 가능한 해결 방법으로 EIF 데이터 대신 파일 작성 날짜를 사용할 수 있습니다. 이것은 이미지가 촬영 된 날짜와 동일하지 않을 수 있으므로 아래 스크립트에는 관련 섹션이 주석 처리되어 있습니다. 이러한 방식으로 처리하려면 주석을 제거하십시오.
이 스크립트를 다른 이름으로 저장 add_watermark.sh
하고 파일이 들어있는 디렉토리에서 실행하십시오.
bash /path/to/add_watermark.sh
그것은 사용하여 exiv2
설치해야한다 ( sudo apt-get install exiv2
). 스크립트 :
#!/usr/bin/env bash
## This command will find all image files, if you are using other
## extensions, you can add them: -o "*.foo"
find . -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.tif" -o \
-iname "*.tiff" -o -iname "*.png" |
## Go through the results, saving each as $img
while IFS= read -r img; do
## Find will return full paths, so an image in the current
## directory will be ./foo.jpg and the first dot screws up
## bash's pattern matching. Use basename and dirname to extract
## the needed information.
name=$(basename "$img")
path=$(dirname "$img")
ext="${name/#*./}";
## Check whether this file has exif data
if exiv2 "$img" 2>&1 | grep timestamp >/dev/null
## If it does, read it and add the water mark
then
echo "Processing $img...";
convert "$img" -gravity SouthEast -pointsize 22 -fill white \
-annotate +30+30 %[exif:DateTimeOriginal] \
"$path"/"${name/%.*/.time.$ext}";
## If the image has no exif data, use the creation date of the
## file. CAREFUL: this is the date on which this particular file
## was created and it will often not be the same as the date the
## photo was taken. This is probably not the desired behaviour so
## I have commented it out. To activate, just remove the # from
## the beginning of each line.
# else
# date=$(stat "$img" | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2)
# convert "$img" -gravity SouthEast -pointsize 22 -fill white \
# -annotate +30+30 "$date" \
# "$path"/"${name/%.*/.time.$ext}";
fi
done
convert.im6: unknown image property "%[exif:DateTimeOriginal]" @ warning/property.c/InterpretImageProperties/3245. convert.im6: unable to open image `{img/%.*/.time.jpg}': No such file or directory @ error/blob.c/OpenBlob/2638.
또한 하위 디렉토리를 아직 사용할지 여부를 결정하지 않았습니다. 사용법find
도 보여줄 수 있습니까? 감사!