update: image compress support size units
This commit is contained in:
+28
-3
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user