image-anonymizer.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #!/bin/bash
  2. # CONFIGURATION
  3. VERSION="0.2"
  4. TITLE="Image anonymizer"
  5. # ASSETS
  6. GUIPATH=$(dirname "$0")
  7. GUIPATH="$GUIPATH/gui"
  8. GUIPATH=$(cd "$GUIPATH" && pwd)
  9. if [[ -z "$GUIPATH" ]] ; then
  10. echo "For some reason, the path is not accessible."
  11. exit 1
  12. fi
  13. BASH=$(bash --version | head -1 | awk '{print $4}' | cut -d'(' -f1)
  14. IM=$(convert -version | head -1 | awk '{print $3}' | cut -d'-' -f1)
  15. EXIFTOOL=$(exiftool -ver)
  16. OPTIPNG=$(optipng -version | head -1 | awk '{print $3}')
  17. DIALOG=$(zenity --version)
  18. # FUNCTIONS
  19. zenexit() {
  20. zenity --window-icon="$GUIPATH/tux.png" \
  21. --width="200" \
  22. --title="$TITLE" \
  23. --error \
  24. --text="Operation canceled.\nThank you for using $TITLE." \
  25. 2> /dev/null
  26. rm -f "$HTML"
  27. exit 1
  28. }
  29. zenstart() {
  30. zenity --window-icon="$GUIPATH/tux.png" \
  31. --title="$TITLE" \
  32. --width="600" --height="400" \
  33. --text-info \
  34. --html \
  35. --filename="$HTML" \
  36. --cancel-label="I don't care" \
  37. --ok-label="Choose a directory" \
  38. 2> /dev/null
  39. }
  40. zendir() {
  41. DIR=$(zenity --window-icon="$GUIPATH/tux.png" --title="$TITLE" --file-selection --directory 2> /dev/null)
  42. }
  43. zenchoutff() {
  44. zenity --window-icon="$GUIPATH/tux.png" \
  45. --title="$TITLE" \
  46. --width="250" --height="20" \
  47. --text "Please choose the output format" \
  48. --list \
  49. --radiolist \
  50. --hide-header \
  51. --column "Radio buttons" \
  52. --column="Output file format" \
  53. --column="Output file format (extension)" \
  54. --hide-column=3 \
  55. --print-column=3 \
  56. TRUE PNG png FALSE JPEG jpg 2> /dev/null
  57. }
  58. zenend() {
  59. zenity --window-icon="$GUIPATH/tux.png" \
  60. --title="$TITLE" \
  61. --width="800" --height="600" \
  62. --text-info \
  63. --html \
  64. --filename="$HTML" \
  65. --cancel-label="Restart" \
  66. --ok-label="Exit" \
  67. 2> /dev/null
  68. rm -f "$HTML"
  69. }
  70. zenjob() {
  71. zenity --window-icon="$GUIPATH/tux.png" \
  72. --title="$TITLE" \
  73. --progress \
  74. --width="600" \
  75. --percentage=0 \
  76. --cancel-label="Stop everything" \
  77. --ok-label="What happened?" \
  78. 2> /dev/null
  79. }
  80. # MAIN
  81. HTML="/tmp/ianon.html.$RANDOM"
  82. cat "$GUIPATH/top.tpl" > $HTML
  83. cat "$GUIPATH/start.tpl" \
  84. | sed s/'{VERSION}'/"$VERSION"/g \
  85. | sed s/'{BASH}'/"$BASH"/g \
  86. | sed s/'{DIALOG}'/"$DIALOG"/g \
  87. | sed s/'{IM}'/"$IM"/g \
  88. | sed s/'{EXIFTOOL}'/"$EXIFTOOL"/g \
  89. | sed s/'{OPTIPNG}'/"$OPTIPNG"/g \
  90. >> $HTML
  91. cat "$GUIPATH/bottom.tpl" >> $HTML
  92. zenstart
  93. ZENSTART=$?
  94. if [ "$ZENSTART" -eq 0 ]
  95. then
  96. zendir
  97. ZENDIR=$?
  98. if [ "$ZENDIR" -eq 0 ]
  99. then
  100. cd $DIR;
  101. OUTFF=$(zenchoutff)
  102. if [ "$OUTFF" != "" ]; then
  103. cat "$GUIPATH/top.tpl" > $HTML
  104. echo "<h2>Thank you for using "$TITLE".</h2>" >> $HTML
  105. (
  106. P=0
  107. for F in *;
  108. do
  109. identify -quiet "$F" &> /dev/null
  110. if [ "$?" -eq 0 ]
  111. then
  112. OTYPE=$(file -b --mime-type "$F" | sed -e "s/^[^/]*\///")
  113. N=$(md5sum "$F" | awk '{print $1}')
  114. N="$N.anon.$OUTFF"
  115. OLDTYPE=$(file "$F" | cut -d':' -f2)
  116. OLDTYPE=$(echo $OLDTYPE | sed 's/ *$//g')
  117. if [ ${#OLDTYPE} -gt 64 ]
  118. then
  119. OLDTYPE="${OLDTYPE:0:61}..."
  120. fi
  121. # This is the important part of the script!
  122. [ "$OTYPE" != "$OUTFF" ] && convert "$F" "$N" &> /dev/null || cp "$F" "$N" &> /dev/null
  123. exiftool -overwrite_original -q -all= "$N" &> /dev/null
  124. [ "$OTYPE" == "png" ] && optipng --silent "$N" &> /dev/null
  125. OLDSIZE=$(ls -lah "$F" | awk '{print $5}')
  126. NEWSIZE=$(ls -lah "$N" | awk '{print $5}')
  127. OLDNAME="$F"
  128. if [ ${#OLDNAME} -gt 24 ]
  129. then
  130. OLDNAME="${OLDNAME:0:21}..."
  131. fi
  132. P=$(($P + 10))
  133. echo "$P"
  134. echo "# $OLDNAME ($OLDSIZE) $OLDTYPE"
  135. echo "<p>&larr; <b>$F</b> ($OLDSIZE)<br> &bull; $OLDTYPE<br>&rarr; <b>$N</b> ($NEWSIZE)" >> $HTML
  136. fi
  137. done
  138. echo "100"
  139. echo "# Thats' all folks!"
  140. ) | zenjob
  141. if [ "$?" -eq 1 ]
  142. then zenexit
  143. fi
  144. else
  145. zenexit
  146. fi
  147. fi
  148. if [ "$ZENDIR" -eq 1 ]
  149. then zenexit
  150. fi
  151. cat "$GUIPATH/bottom.tpl" >> $HTML
  152. zenend
  153. ZENEND=$?
  154. if [ "$ZENEND" -eq 1 ]
  155. then exit
  156. fi
  157. if [ "$ZENEND" -eq 0 ]
  158. then
  159. cd "$GUIPATH"
  160. exec ../$(basename $0) && exit
  161. fi
  162. fi
  163. if [ "$ZENSTART" -eq 1 ]
  164. then zenexit
  165. fi