update: image compress support size units

This commit is contained in:
Sam Hadow
2026-03-25 15:07:08 +01:00
parent 25ca834aee
commit ba336aaf14
2 changed files with 30 additions and 4 deletions
+2 -1
View File
@@ -42,8 +42,9 @@ kill every wine process including processes hanging
convert animated .webp at $1 (path) to a gif convert animated .webp at $1 (path) to a gif
### image_compress.sh ### image_compress.sh
Usage: `./image_compress.sh <input> <output.jpg> <size in bytes>` Usage: `./image_compress.sh <input> <output.jpg> <target size>`
Compress an image until it's below a specified target size. Output format is JPEG, regardless of the input format. Compress an image until it's below a specified target size. Output format is JPEG, regardless of the input format.
The target size can be without unit (default to bytes). Or in B, KB or MB, for bytes, kilo bytes and mega bytes (not case sensitive).
(requires ImageMagick) (requires ImageMagick)
### convert_md_to_pdf.sh ### convert_md_to_pdf.sh
+28 -3
View File
@@ -2,13 +2,38 @@
input="$1" input="$1"
output="$2" output="$2"
target_size=$3 target_size_raw="$3"
if [[ -z "$input" || -z "$output" || -z "$target_size" ]]; then if [[ -z "$input" || -z "$output" || -z "$target_size_raw" ]]; then
echo "Usage: $0 input output.jpg <target size in bytes>" echo "Usage: $0 input output.jpg <target size>"
exit 1 exit 1
fi fi
parse_size() {
local size="$1"
size=$(echo "$size" | tr '[:lower:]' '[:upper:]' | tr -d ' ')
if [[ "$size" =~ ^([0-9]+(\.[0-9]+)?)(B|KB|MB)?$ ]]; then
value="${BASH_REMATCH[1]}"
unit="${BASH_REMATCH[3]}"
case "$unit" in
""|"B") multiplier=1 ;;
"KB") multiplier=1024 ;;
"MB") multiplier=$((1024 * 1024)) ;;
*) echo "Invalid size unit: $unit"; exit 1 ;;
esac
awk "BEGIN {printf \"%d\", $value * $multiplier}"
else
echo "Invalid size format: $size"
exit 1
fi
}
target_size=$(parse_size "$target_size_raw")
compress_and_get_size() { compress_and_get_size() {
local q=$1 local q=$1
magick "$work" -strip -interlace Plane -quality "$q" "$output" magick "$work" -strip -interlace Plane -quality "$q" "$output"