image-anonymizer.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/bin/bash
  2. # CONFIGURATION
  3. VERSION="0.1"
  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. zenend() {
  44. zenity --window-icon="$GUIPATH/tux.png" \
  45. --title="$TITLE" \
  46. --width="800" --height="600" \
  47. --text-info \
  48. --html \
  49. --filename="$HTML" \
  50. --cancel-label="Restart" \
  51. --ok-label="Exit" \
  52. 2> /dev/null
  53. rm -f "$HTML"
  54. }
  55. zenjob() {
  56. zenity --window-icon="$GUIPATH/tux.png" \
  57. --title="$TITLE" \
  58. --progress \
  59. --width="600" \
  60. --percentage=0 \
  61. --cancel-label="Stop everything" \
  62. --ok-label="What happened?" \
  63. 2> /dev/null
  64. }
  65. # MAIN
  66. HTML="/tmp/ianon.html.$RANDOM"
  67. cat "$GUIPATH/top.tpl" > $HTML
  68. cat "$GUIPATH/start.tpl" \
  69. | sed s/'{VERSION}'/"$VERSION"/g \
  70. | sed s/'{BASH}'/"$BASH"/g \
  71. | sed s/'{DIALOG}'/"$DIALOG"/g \
  72. | sed s/'{IM}'/"$IM"/g \
  73. | sed s/'{EXIFTOOL}'/"$EXIFTOOL"/g \
  74. | sed s/'{OPTIPNG}'/"$OPTIPNG"/g \
  75. >> $HTML
  76. cat "$GUIPATH/bottom.tpl" >> $HTML
  77. zenstart
  78. ZENSTART=$?
  79. if [ "$ZENSTART" -eq 0 ]
  80. then
  81. zendir
  82. ZENDIR=$?
  83. if [ "$ZENDIR" -eq 0 ]
  84. then
  85. cd $DIR;
  86. cat "$GUIPATH/top.tpl" > $HTML
  87. echo "<h2>Thank you for using "$TITLE".</h2>" >> $HTML
  88. (
  89. P=0
  90. for F in *;
  91. do
  92. identify -quiet "$F" &> /dev/null
  93. if [ "$?" -eq 0 ]
  94. then
  95. N=$(md5sum "$F" | awk '{print $1}')
  96. N="$N.anon.png"
  97. OLDTYPE=$(file "$F" | cut -d':' -f2)
  98. OLDTYPE=$(echo $OLDTYPE | sed 's/ *$//g')
  99. if [ ${#OLDTYPE} -gt 64 ]
  100. then
  101. OLDTYPE="${OLDTYPE:0:61}..."
  102. fi
  103. # This is the important part of the script!
  104. convert "$F" "$N" &> /dev/null
  105. exiftool -overwrite_original -q -all= "$N" &> /dev/null
  106. optipng --silent "$N" &> /dev/null
  107. OLDSIZE=$(ls -lah "$F" | awk '{print $5}')
  108. NEWSIZE=$(ls -lah "$N" | awk '{print $5}')
  109. OLDNAME="$F"
  110. if [ ${#OLDNAME} -gt 24 ]
  111. then
  112. OLDNAME="${OLDNAME:0:21}..."
  113. fi
  114. P=$(($P + 10))
  115. echo "$P"
  116. echo "# $OLDNAME ($OLDSIZE) $OLDTYPE"
  117. echo "<p>&larr; <b>$F</b> ($OLDSIZE)<br> &bull; $OLDTYPE<br>&rarr; <b>$N</b> ($NEWSIZE)" >> $HTML
  118. fi
  119. done
  120. echo "100"
  121. echo "# Thats' all folks!"
  122. ) | zenjob
  123. if [ "$?" -eq 1 ]
  124. then zenexit
  125. fi
  126. fi
  127. if [ "$ZENDIR" -eq 1 ]
  128. then zenexit
  129. fi
  130. cat "$GUIPATH/bottom.tpl" >> $HTML
  131. zenend
  132. ZENEND=$?
  133. if [ "$ZENEND" -eq 1 ]
  134. then exit
  135. fi
  136. if [ "$ZENEND" -eq 0 ]
  137. then
  138. cd "$GUIPATH"
  139. exec ../$(basename $0) && exit
  140. fi
  141. fi
  142. if [ "$ZENSTART" -eq 1 ]
  143. then zenexit
  144. fi