I'm using the following tools to perform lossless image compression:
For each of the programs, I've created two shortcuts:
- One that does the actual compression, and shows the file size of both files
- One that replaces the original file with the compressed one (If I'm satisfied, I'll do arrow-up, prefix my previous command with a "m", and press enter).
I've put this in my .bashrc:
# Image optimization tools
png() {
    pngcrush -brute "$1"{,.} && du -b "$1"{,.}
}
gif() {
    gifsicle -O "$1" -o "$1." && du -b "$1"{,.}
}
jpeg() {
    jpegtran "$1" > "$1." && du -b "$1"{,.}
}
# Just for easy access in history
mpng() {
    mv "$1"{.,}
}
mgif() {
    newsize=$(wc -c <"$1.")
    oldsize=$(wc -c <"$1")
    if [ $oldsize -gt $newsize ] ; then
        mv "$1"{.,}
    else
        rm "$1."
    fi  
}
mjpeg() {
    mv "$1"{.,}
}
Note: pngcrush -brute is very verbose. Redirect the output to /dev/null if you're not interested in the progress.