mirror of
https://github.com/penpot/penpot.git
synced 2025-01-08 16:00:19 -05:00
a1586280a9
Add a helper script and compress existing PNG images with zopflipng. Before 552K total After 428K total Signed-off-by: Rodolfo Carvalho
62 lines
2.1 KiB
Bash
Executable file
62 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# This script automates compressing PNG images using the lossless Zopfli
|
|
# Compression Algorithm. The process is slow but can produce significantly
|
|
# better compression and, thus, smaller file sizes.
|
|
#
|
|
# This script is meant to be run manually, for example, before making a new
|
|
# release.
|
|
#
|
|
# Requirements
|
|
#
|
|
# zopflipng - https://github.com/google/zopfli
|
|
# Debian/Ubuntu: sudo apt install zopfli
|
|
# Fedora: sudo dnf install zopfli
|
|
# macOS: brew install zopfli
|
|
#
|
|
# Usage
|
|
#
|
|
# This script takes a single positional argument which is the path where to
|
|
# search for PNG files. By default, the target path is the current working
|
|
# directory. Run from the root of the repository to compress all PNG images. Run
|
|
# from the `frontend` subdirectory to compress all PNG images within that
|
|
# directory. Alternatively, run from any directory and pass an explicit path to
|
|
# `compress-png` to limit the script to that path/directory.
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
readonly TARGET="${1:-.}"
|
|
readonly ABS_TARGET="$(command -v realpath &>/dev/null && realpath "$TARGET")"
|
|
|
|
function png_total_size() {
|
|
find "$TARGET" -type f -iname '*.png' -exec du -ch {} + | tail -1
|
|
}
|
|
|
|
echo "Compressing PNGs in ${ABS_TARGET:-$TARGET}"
|
|
|
|
echo "Before"
|
|
png_total_size
|
|
|
|
readonly opts=(
|
|
# More iterations means slower, potentially better compression.
|
|
#--iterations=500
|
|
-m
|
|
# Try all filter strategies (slow).
|
|
#--filters=01234mepb
|
|
# According to docs, remove colors behind alpha channel 0. No visual
|
|
# difference, removes hidden information.
|
|
--lossy_transparent
|
|
# Avoid information loss that could affect how images are rendered, see
|
|
# https://github.com/penpot/penpot/issues/1533#issuecomment-1030005203
|
|
# https://github.com/google/zopfli/issues/113
|
|
--keepchunks=cHRM,gAMA,pHYs,iCCP,sRGB,oFFs,sTER
|
|
# Since we have git behind our back, overwrite PNG files in-place (only
|
|
# when result is smaller).
|
|
-y
|
|
)
|
|
time find "$TARGET" -type f -iname '*.png' -exec zopflipng "${opts[@]}" {} {} \;
|
|
|
|
echo "After"
|
|
png_total_size
|