From 172e3086c827cdbf6b69d7150490f06da52a0045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Sat, 22 May 2021 21:56:59 +0200 Subject: [PATCH] Add generate images scripts --- assets/files/images.json | 4 +- scripts/.gitignore | 2 + scripts/01_optimize_images.sh | 46 ++++++++++++++++++++++ scripts/02_build_images_assets_list.sh | 45 +++++++++++++++++++++ scripts/cache/01_raw_images/.gitkeep | 0 scripts/cache/02_optimized_images/.gitkeep | 0 6 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 scripts/.gitignore create mode 100755 scripts/01_optimize_images.sh create mode 100755 scripts/02_build_images_assets_list.sh create mode 100644 scripts/cache/01_raw_images/.gitkeep create mode 100644 scripts/cache/02_optimized_images/.gitkeep diff --git a/assets/files/images.json b/assets/files/images.json index 059fd9c..a31f990 100644 --- a/assets/files/images.json +++ b/assets/files/images.json @@ -1,9 +1,9 @@ { "images": [ - "acb90f2491a73ba81e9f3d540ba66ffb", - "78edb7a85c822c76eae85da9fcd31324", "0962959cf3392e84b9816de7fd80b656", + "78edb7a85c822c76eae85da9fcd31324", "7c2f42e74e249ce9dad4a0802dde22c2", + "acb90f2491a73ba81e9f3d540ba66ffb", "" ] } diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000..88cc107 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1,2 @@ +*.jpg +*.png diff --git a/scripts/01_optimize_images.sh b/scripts/01_optimize_images.sh new file mode 100755 index 0000000..7ff136f --- /dev/null +++ b/scripts/01_optimize_images.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +command -v convert >/dev/null 2>&1 || { echo >&2 "I require convert (imagemagick) but it's not installed. Aborting."; exit 1; } +command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" + +IMAGES_CACHE_FOLDER="${CURRENT_DIR}/cache" +IMAGES_RAW_FOLDER="${IMAGES_CACHE_FOLDER}/01_raw_images" +IMAGES_OPTIMIZED_FOLDER="${IMAGES_CACHE_FOLDER}/02_optimized_images" + +RESIZE_OPTION="640x640" +CROP_PARAMETERS="-auto-orient -trim +repage -gravity center -background white -extent ${RESIZE_OPTION}^" +CONVERT_OPTIONS="-alpha off +dither -colors 256 -depth 4" + +OPTIPNG_OPTIONS="-preserve -quiet -o7" + +echo "Cleaning empty/temp files..." +find "${IMAGES_CACHE_FOLDER}" -type f -name "*.png" -empty -exec rm {} \; +find "${IMAGES_CACHE_FOLDER}" -type f -name "*.tmp*" -exec rm {} \; + +echo "Cleaning existing optimized images..." +find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" -exec rm {} \; + +IMAGES="$(find "${IMAGES_RAW_FOLDER}" -type f -name "*.??g" | sort)" + +while read -r INPUT_FILE; do + if [[ -n "${INPUT_FILE}" ]]; then + HASH="$(echo "${INPUT_FILE%.*}" | md5sum | cut -c1-32)" + OUTPUT_FILE="${IMAGES_OPTIMIZED_FOLDER}/${HASH}.png" + echo " OUTPUT_FILE: ${OUTPUT_FILE}" + + if [[ -f "${OUTPUT_FILE}" ]]; then + echo " - Already optimized" + else + mkdir -p "$(dirname ${OUTPUT_FILE})" + + echo " + Converting..." + convert "${INPUT_FILE}" -resize "${RESIZE_OPTION}^" ${CROP_PARAMETERS} ${CONVERT_OPTIONS} "${OUTPUT_FILE}" + echo " + Optimizing..." + optipng ${OPTIPNG_OPTIONS} "${OUTPUT_FILE}" + fi + fi +done < <(echo "${IMAGES}") + +echo "done." diff --git a/scripts/02_build_images_assets_list.sh b/scripts/02_build_images_assets_list.sh new file mode 100755 index 0000000..3e9e3db --- /dev/null +++ b/scripts/02_build_images_assets_list.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +command -v jq >/dev/null 2>&1 || { echo >&2 "I require jq (json parser) but it's not installed. Aborting."; exit 1; } + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +BASE_DIR="$(dirname "${CURRENT_DIR}")" + +ASSETS_BASE_FOLDER="${BASE_DIR}/assets" +OUTPUT_ASSETS_FILE="${ASSETS_BASE_FOLDER}/files/images.json" +IMAGES_ASSETS_FOLDER="${ASSETS_BASE_FOLDER}/images" +touch "${OUTPUT_ASSETS_FILE}" + +IMAGES_CACHE_FOLDER="${CURRENT_DIR}/cache" +IMAGES_OPTIMIZED_FOLDER="${IMAGES_CACHE_FOLDER}/02_optimized_images" + +echo "Cleaning empty/temp files..." +find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" -empty -exec rm {} \; +find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.tmp*" -exec rm {} \; + +echo "Move new optimized images..." +find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" -exec mv -v {} "${IMAGES_ASSETS_FOLDER}" \; + +echo "Building assets json file..." + +FILES="$(find "${IMAGES_ASSETS_FOLDER}" -type f -name "*.png" | sed "s|^${IMAGES_OPTIMIZED_FOLDER}/||g" | sort)" + +OUTPUT_ASSETS_FILE_TMP="${OUTPUT_ASSETS_FILE}.tmp" +echo "{" > "${OUTPUT_ASSETS_FILE_TMP}" +echo " \"images\": [" >> "${OUTPUT_ASSETS_FILE_TMP}" +while read -r FILE; do + FILE_CODE="$(basename "${FILE%.*}")" + if [[ -n "${FILE}" ]]; then + echo "- ${FILE_CODE}" + echo " \"${FILE_CODE}\"," >> "${OUTPUT_ASSETS_FILE_TMP}" + fi +done < <(echo "${FILES}") +echo " \"\"" >> "${OUTPUT_ASSETS_FILE_TMP}" +echo " ]" >> "${OUTPUT_ASSETS_FILE_TMP}" +echo "}" >> "${OUTPUT_ASSETS_FILE_TMP}" + +# Format json +cat "${OUTPUT_ASSETS_FILE_TMP}" | jq > "${OUTPUT_ASSETS_FILE}" +rm "${OUTPUT_ASSETS_FILE_TMP}" + +echo "done." diff --git a/scripts/cache/01_raw_images/.gitkeep b/scripts/cache/01_raw_images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/cache/02_optimized_images/.gitkeep b/scripts/cache/02_optimized_images/.gitkeep new file mode 100644 index 0000000..e69de29 -- GitLab