|
一般存在电脑里的原始照片不太愿意有日期打在上面,但是如果要洗出来的话还是有拍摄时间在上面方便。
这个脚本的作用就是从照片的exif里读取照片的时间,印在照片上。
需要安装exif和imagemagick
虽然也可以用identify读取exif信息但速度慢。
打日期后的照片效果如图(已缩小):
代码如下:- #!/bin/bash
- LANG=C
- time=`date +%s%N`
- for FILE in "$@"
- do
- #echo "$FILE" && continue
- [[ -f "$FILE" ]] || continue
- TEXT=$(exif -mt "0x9003" "$FILE")
- # TEXT=$(identify -format %[EXIF:DateTime] "$FILE")
- [ -z "$TEXT" ] && exit 1
- TEXT=${TEXT% *}
- TEXT=${TEXT//:/\/}
-
- read WIDTH HEIGHT QUALITY< <(identify -format "%w %h %Q" "$FILE")
-
- [[ $QUALITY -le 90 ]] && QUALITY=96
- [[ $WIDTH -gt $HEIGHT ]] && SHORT=$HEIGHT || SHORT=$WIDTH
- ORIENTATION=$(exif -mt "Orientation" "$FILE")
- if [[ $ORIENTATION == 'left - bottom' ]]
- then
- gravity=SouthWest
- anno=90x90+$((SHORT/20))+$((SHORT/20*6))
- degree=90
- elif [[ $ORIENTATION == 'right - top' ]]
- then
- gravity=NorthEast
- anno=270x270+$((SHORT/12))+$((SHORT/20))
- degree=270
- else
- gravity=SouthEast
- anno=+$((SHORT/20))+$((SHORT/20))
- degree=0
- fi
- position=+$((SHORT/20))+$((SHORT/20))
-
- OUTPUT="${FILE%.*}_anno.jpg"
- offset=$((SHORT/600))
-
- convert -size $((SHORT/3))x$((SHORT/19)) xc:transparent \
- -font "DejaVu-Sans-Condensed-Oblique" -pointsize $((SHORT/20)) \
- -fill white -annotate +$((offset/2))+$((SHORT/23+$offset/2)) "$TEXT" \
- -fill black -annotate +$((offset*3/2))+$((SHORT/23+offset*3/2)) "$TEXT" \
- -fill white -annotate +0+$((SHORT/23)) "$TEXT" \
- -fill black -annotate +$((2*$offset))+$((SHORT/23+2*$offset)) "$TEXT" \
- -fill white -annotate +$offset+$((SHORT/23+$offset)) "$TEXT" \
- -write /tmp/$time.date.png \
- -alpha extract -brightness-contrast -30 -fill gray10 -annotate +$offset+$((SHORT/23+$offset)) "$TEXT" +matte \
- /tmp/$time.mask.jpg
- convert "$FILE" \
- \( /tmp/$time.date.png /tmp/$time.mask.jpg -alpha Off -compose Copy_Opacity -composite \
- -trim +repage -rotate $degree \) -gravity $gravity -geometry $position -compose over -composite \
- -quality $QUALITY "$OUTPUT"
- rm /tmp/$time.*
- done
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|