LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 835|回复: 0

给数码照片打时间戳的脚本

[复制链接]
发表于 2010-11-7 23:28:29 | 显示全部楼层 |阅读模式
一般存在电脑里的原始照片不太愿意有日期打在上面,但是如果要洗出来的话还是有拍摄时间在上面方便。
这个脚本的作用就是从照片的exif里读取照片的时间,印在照片上。
需要安装exif和imagemagick
虽然也可以用identify读取exif信息但速度慢。
打日期后的照片效果如图(已缩小):

代码如下:
  1. #!/bin/bash
  2. LANG=C
  3. time=`date +%s%N`
  4. for FILE in "$@"
  5. do
  6.         #echo "$FILE" && continue
  7.         [[ -f "$FILE" ]] || continue
  8.         TEXT=$(exif -mt "0x9003" "$FILE")
  9.         # TEXT=$(identify -format %[EXIF:DateTime] "$FILE")
  10.         [ -z "$TEXT" ] && exit 1
  11.         TEXT=${TEXT% *}
  12.         TEXT=${TEXT//:/\/}
  13.        
  14.         read WIDTH HEIGHT QUALITY< <(identify -format "%w %h %Q" "$FILE")
  15.        
  16.         [[ $QUALITY -le 90 ]] && QUALITY=96
  17.         [[ $WIDTH -gt $HEIGHT ]] && SHORT=$HEIGHT || SHORT=$WIDTH
  18.         ORIENTATION=$(exif -mt "Orientation" "$FILE")
  19.         if [[ $ORIENTATION == 'left - bottom' ]]
  20.         then
  21.                 gravity=SouthWest
  22.                 anno=90x90+$((SHORT/20))+$((SHORT/20*6))
  23.                 degree=90
  24.         elif [[ $ORIENTATION == 'right - top' ]]
  25.         then
  26.                 gravity=NorthEast
  27.                 anno=270x270+$((SHORT/12))+$((SHORT/20))
  28.                 degree=270
  29.         else
  30.                 gravity=SouthEast
  31.                 anno=+$((SHORT/20))+$((SHORT/20))
  32.                 degree=0
  33.         fi
  34.         position=+$((SHORT/20))+$((SHORT/20))
  35.        
  36.         OUTPUT="${FILE%.*}_anno.jpg"
  37.         offset=$((SHORT/600))
  38.        
  39.         convert -size $((SHORT/3))x$((SHORT/19)) xc:transparent \
  40.                 -font "DejaVu-Sans-Condensed-Oblique" -pointsize $((SHORT/20)) \
  41.                 -fill white -annotate +$((offset/2))+$((SHORT/23+$offset/2)) "$TEXT" \
  42.                 -fill black -annotate +$((offset*3/2))+$((SHORT/23+offset*3/2)) "$TEXT" \
  43.                 -fill white -annotate +0+$((SHORT/23)) "$TEXT" \
  44.                 -fill black -annotate +$((2*$offset))+$((SHORT/23+2*$offset))  "$TEXT" \
  45.                 -fill white -annotate +$offset+$((SHORT/23+$offset))  "$TEXT" \
  46.                 -write /tmp/$time.date.png \
  47.                 -alpha extract -brightness-contrast -30 -fill gray10 -annotate +$offset+$((SHORT/23+$offset)) "$TEXT" +matte \
  48.                 /tmp/$time.mask.jpg
  49.         convert "$FILE" \
  50.                 \( /tmp/$time.date.png /tmp/$time.mask.jpg -alpha Off -compose Copy_Opacity -composite \
  51.                 -trim +repage -rotate $degree \) -gravity $gravity -geometry $position -compose over -composite \
  52.                 -quality $QUALITY "$OUTPUT"
  53.         rm /tmp/$time.*
  54. done
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表