update: image compress support size units

This commit is contained in:
Sam Hadow committed 2026-03-25 15:07:08 +01:00
1 parent 25ca834aee
commit ba336aaf14
2 files changed
+30 -4

No files matched your search

+2 -1
View File
@@ -42,8 +42,9 @@ kill every wine process including processes hanging
convert animated .webp at $1 (path) to a gif
### 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.
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)
### convert_md_to_pdf.sh
+28 -3
View File
@@ -2,13 +2,38 @@
input="$1"
output="$2"
target_size=$3
target_size_raw="$3"
if [[ -z "$input" || -z "$output" || -z "$target_size" ]]; then
echo "Usage: $0 input output.jpg <target size in bytes>"
if [[ -z "$input" || -z "$output" || -z "$target_size_raw" ]]; then
echo "Usage: $0 input output.jpg <target size>"
exit 1
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() {
local q=$1
magick "$work" -strip -interlace Plane -quality "$q" "$output"