Image anonymizer
This commit is contained in:
parent
519e2dfa7f
commit
7ce251edb3
10 changed files with 226 additions and 0 deletions
34
Graphics/image-anonymizer/README.md
Normal file
34
Graphics/image-anonymizer/README.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Image anonymizer
|
||||
|
||||
**Image anonymizer** is a frontend program for some tools that work with images.
|
||||
|
||||
The program makes a **PNG** copy of the original image; the copy is optimized and **all metadata is removed**.
|
||||
|
||||
## Screenshots
|
||||
|
||||
![001](screenshot-001.png)
|
||||
![002](screenshot-002.png)
|
||||
![003](screenshot-003.png)
|
||||
![004](screenshot-004.png)
|
||||
|
||||
## Install
|
||||
|
||||
### Requirements
|
||||
|
||||
* **[GNU bash](https://www.gnu.org/software/bash/)** is the **GNU Project**'s shell—the **Bourne Again SHell**.
|
||||
* **[Zenity](https://help.gnome.org/users/zenity/)** is a rewrite of **gdialog**, the **GNOME** port of dialog which allows you to display dialog boxes from the commandline and shell scripts.
|
||||
* **[ImageMagick](https://imagemagick.org/)** is a suite of programs for creating, editing, compositing or converting digital images. It can read and write images in a variety of formats.
|
||||
* **[Exiftool](https://www.exiftool.org/)** is a platform-independent **Perl library** plus a command-line application for reading, writing and editing meta information in a wide variety of files.
|
||||
* **[OptiPNG](http://optipng.sourceforge.net/)** is a **PNG optimizer** that recompresses image files to a smaller size, without losing any information.
|
||||
|
||||
### Get the code
|
||||
|
||||
You can use **git**.
|
||||
|
||||
git clone https://git.lattuga.net/netico/code-library.git
|
||||
|
||||
and then look for the script **image-anonymizer.sh**.
|
||||
|
||||
## Usage
|
||||
|
||||
./image-anonymizer.sh &
|
2
Graphics/image-anonymizer/gui/bottom.tpl
Normal file
2
Graphics/image-anonymizer/gui/bottom.tpl
Normal file
|
@ -0,0 +1,2 @@
|
|||
</body>
|
||||
</html>
|
12
Graphics/image-anonymizer/gui/start.tpl
Normal file
12
Graphics/image-anonymizer/gui/start.tpl
Normal file
|
@ -0,0 +1,12 @@
|
|||
<h1>Image anonymizer</h1>
|
||||
<h4>Version {VERSION}</h4>
|
||||
<p>License GPLv3+: <a href='https://www.gnu.org/licenses/gpl-3.0.html'>GNU GPL version 3 or later</a>
|
||||
<br>This is free software; you are free to change and redistribute it.</p>
|
||||
<p>
|
||||
Powered by<br>
|
||||
<b><a href="https://www.gnu.org/software/bash/">GNU bash</a></b>: {BASH}<br>
|
||||
<b><a href="https://help.gnome.org/users/zenity/">Zenity</a></b>: {DIALOG}<br>
|
||||
<b><a href="https://imagemagick.org/">ImageMagick</a></b>: {IM}<br>
|
||||
<b><a href="https://www.exiftool.org/">Exiftool</a></b>: {EXIFTOOL} <br>
|
||||
<b><a href="http://optipng.sourceforge.net/">OptiPNG</a></b>: {OPTIPNG}<br>
|
||||
</p>
|
18
Graphics/image-anonymizer/gui/top.tpl
Normal file
18
Graphics/image-anonymizer/gui/top.tpl
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Image anonymizer</title>
|
||||
<style>
|
||||
body {
|
||||
background-image: linear-gradient(to right, black 60%, #181818 80%, black 100%);
|
||||
color: white;
|
||||
padding: 0px 15px;
|
||||
margin: 0px;
|
||||
}
|
||||
a {
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
BIN
Graphics/image-anonymizer/gui/tux.png
Normal file
BIN
Graphics/image-anonymizer/gui/tux.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
160
Graphics/image-anonymizer/image-anonymizer.sh
Executable file
160
Graphics/image-anonymizer/image-anonymizer.sh
Executable file
|
@ -0,0 +1,160 @@
|
|||
#!/bin/bash
|
||||
|
||||
# CONFIGURATION
|
||||
VERSION="0.1"
|
||||
TITLE="Image anonymizer"
|
||||
|
||||
# ASSETS
|
||||
GUIPATH=$(dirname "$0")
|
||||
GUIPATH="$GUIPATH/gui"
|
||||
GUIPATH=$(cd "$GUIPATH" && pwd)
|
||||
if [[ -z "$GUIPATH" ]] ; then
|
||||
echo "For some reason, the path is not accessible."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BASH=$(bash --version | head -1 | awk '{print $4}' | cut -d'(' -f1)
|
||||
IM=$(convert -version | head -1 | awk '{print $3}' | cut -d'-' -f1)
|
||||
EXIFTOOL=$(exiftool -ver)
|
||||
OPTIPNG=$(optipng -version | head -1 | awk '{print $3}')
|
||||
DIALOG=$(zenity --version)
|
||||
|
||||
# FUNCTIONS
|
||||
zenexit() {
|
||||
zenity --window-icon="$GUIPATH/tux.png" \
|
||||
--width="200" \
|
||||
--title="$TITLE" \
|
||||
--error \
|
||||
--text="Operation canceled.\nThank you for using $TITLE." \
|
||||
2> /dev/null
|
||||
rm -f "$HTML"
|
||||
exit 1
|
||||
}
|
||||
zenstart() {
|
||||
zenity --window-icon="$GUIPATH/tux.png" \
|
||||
--title="$TITLE" \
|
||||
--width="600" --height="400" \
|
||||
--text-info \
|
||||
--html \
|
||||
--filename="$HTML" \
|
||||
--cancel-label="I don't care" \
|
||||
--ok-label="Choose a directory" \
|
||||
2> /dev/null
|
||||
}
|
||||
zendir() {
|
||||
DIR=$(zenity --window-icon="$GUIPATH/tux.png" --title="$TITLE" --file-selection --directory 2> /dev/null)
|
||||
}
|
||||
zenend() {
|
||||
zenity --window-icon="$GUIPATH/tux.png" \
|
||||
--title="$TITLE" \
|
||||
--width="800" --height="600" \
|
||||
--text-info \
|
||||
--html \
|
||||
--filename="$HTML" \
|
||||
--cancel-label="Restart" \
|
||||
--ok-label="Exit" \
|
||||
2> /dev/null
|
||||
|
||||
rm -f "$HTML"
|
||||
}
|
||||
zenjob() {
|
||||
zenity --window-icon="$GUIPATH/tux.png" \
|
||||
--title="$TITLE" \
|
||||
--progress \
|
||||
--width="600" \
|
||||
--percentage=0 \
|
||||
--cancel-label="Stop everything" \
|
||||
--ok-label="What happened?" \
|
||||
2> /dev/null
|
||||
}
|
||||
|
||||
# MAIN
|
||||
HTML="/tmp/ianon.html.$RANDOM"
|
||||
cat "$GUIPATH/top.tpl" > $HTML
|
||||
cat "$GUIPATH/start.tpl" \
|
||||
| sed s/'{VERSION}'/"$VERSION"/g \
|
||||
| sed s/'{BASH}'/"$BASH"/g \
|
||||
| sed s/'{DIALOG}'/"$DIALOG"/g \
|
||||
| sed s/'{IM}'/"$IM"/g \
|
||||
| sed s/'{EXIFTOOL}'/"$EXIFTOOL"/g \
|
||||
| sed s/'{OPTIPNG}'/"$OPTIPNG"/g \
|
||||
>> $HTML
|
||||
cat "$GUIPATH/bottom.tpl" >> $HTML
|
||||
|
||||
zenstart
|
||||
ZENSTART=$?
|
||||
if [ "$ZENSTART" -eq 0 ]
|
||||
then
|
||||
zendir
|
||||
ZENDIR=$?
|
||||
|
||||
if [ "$ZENDIR" -eq 0 ]
|
||||
then
|
||||
cd $DIR;
|
||||
|
||||
cat "$GUIPATH/top.tpl" > $HTML
|
||||
echo "<h2>Thank you for using "$TITLE".</h2>" >> $HTML
|
||||
(
|
||||
P=0
|
||||
for F in *;
|
||||
do
|
||||
identify -quiet "$F" &> /dev/null
|
||||
if [ "$?" -eq 0 ]
|
||||
then
|
||||
N=$(md5sum "$F" | awk '{print $1}')
|
||||
N="$N.anon.png"
|
||||
|
||||
OLDTYPE=$(file "$F" | cut -d':' -f2)
|
||||
OLDTYPE=$(echo $OLDTYPE | sed 's/ *$//g')
|
||||
if [ ${#OLDTYPE} -gt 64 ]
|
||||
then
|
||||
OLDTYPE="${OLDTYPE:0:61}..."
|
||||
fi
|
||||
|
||||
# This is the important part of the script!
|
||||
convert "$F" "$N" &> /dev/null
|
||||
exiftool -overwrite_original -q -all= "$N" &> /dev/null
|
||||
optipng --silent "$N" &> /dev/null
|
||||
|
||||
OLDSIZE=$(ls -lah "$F" | awk '{print $5}')
|
||||
NEWSIZE=$(ls -lah "$N" | awk '{print $5}')
|
||||
|
||||
OLDNAME="$F"
|
||||
if [ ${#OLDNAME} -gt 24 ]
|
||||
then
|
||||
OLDNAME="${OLDNAME:0:21}..."
|
||||
fi
|
||||
|
||||
P=$(($P + 10))
|
||||
echo "$P"
|
||||
echo "# $OLDNAME ($OLDSIZE) $OLDTYPE"
|
||||
echo "<p>← <b>$F</b> ($OLDSIZE)<br> • $OLDTYPE<br>→ <b>$N</b> ($NEWSIZE)" >> $HTML
|
||||
fi
|
||||
done
|
||||
echo "100"
|
||||
echo "# Thats' all folks!"
|
||||
) | zenjob
|
||||
|
||||
if [ "$?" -eq 1 ]
|
||||
then zenexit
|
||||
fi
|
||||
fi
|
||||
if [ "$ZENDIR" -eq 1 ]
|
||||
then zenexit
|
||||
fi
|
||||
cat "$GUIPATH/bottom.tpl" >> $HTML
|
||||
zenend
|
||||
ZENEND=$?
|
||||
if [ "$ZENEND" -eq 1 ]
|
||||
then exit
|
||||
fi
|
||||
if [ "$ZENEND" -eq 0 ]
|
||||
then
|
||||
cd "$GUIPATH"
|
||||
exec ../$(basename $0) && exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$ZENSTART" -eq 1 ]
|
||||
then zenexit
|
||||
fi
|
BIN
Graphics/image-anonymizer/screenshot-001.png
Normal file
BIN
Graphics/image-anonymizer/screenshot-001.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
BIN
Graphics/image-anonymizer/screenshot-002.png
Normal file
BIN
Graphics/image-anonymizer/screenshot-002.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
Graphics/image-anonymizer/screenshot-003.png
Normal file
BIN
Graphics/image-anonymizer/screenshot-003.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
Graphics/image-anonymizer/screenshot-004.png
Normal file
BIN
Graphics/image-anonymizer/screenshot-004.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
Loading…
Reference in a new issue