25 Ιουλίου 2024 / Lefteris Iliadis (SomniusX)
Heic 2 Jpg με χρήση ImageMagick [bash / cross-platform]
25 Ιουλίου 2024
Μου έδωσαν ένα usb από τον παιδικό της μικρής μας με πολλές φωτογραφίες μέσα να είναι heic.. λέω wtf?! Οπότε ας τις μετατρέψουμε αναλόγως :P
Μου έδωσαν ένα usb από τον παιδικό της μικρής μας με πολλές φωτογραφίες μέσα να είναι heic.. λέω wtf?! Οπότε ας τις μετατρέψουμε αναλόγως :P
Αυτό το script κάνει τα εξής:
- Έλεγχος αν δόθηκε flag: Το script πρώτα ελέγχει αν έχει δοθεί ένας φάκελος ως flag ($1). Αν όχι, εμφανίζει ένα μήνυμα χρήσης και τερματίζει.
- Έλεγχος εγκυρότητας φακέλου: Επιβεβαιώνει ότι ο παρεχόμενος φάκελος υπάρχει.
- Δημιουργία φακέλου εξόδου: Δημιουργεί έναν υποφάκελο
outputμέσα στον φάκελο που περιέχει τις εικόνες HEIC. - Μετατροπή αρχείων HEIC σε JPG: Διατρέχει κάθε αρχείο
.heicστον φάκελο εισόδου και το μετατρέπει σε.jpg, αποθηκεύοντας το αποτέλεσμα στον υποφάκελοoutput. Αν δεν βρεθούν αρχεία.heic, εμφανίζει ένα μήνυμα και τερματίζει. - Εμφάνιση μηνύματος ολοκλήρωσης: Εμφανίζει ένα μήνυμα ότι η μετατροπή ολοκληρώθηκε και ότι οι εικόνες JPG έχουν αποθηκευτεί στον φάκελο εξόδου.
Το script διασφαλίζει ότι οι μετατραπείσες εικόνες είναι οργανωμένες σε έναν υποφάκελο output μέσα στον καθορισμένο φάκελο εισόδου.
#!/bin/bash
# Check if an argument is provided
if [ -z "$1" ]; then
echo "Usage: $0 <input_directory>"
exit 1
fi
# Directory containing HEIC images (provided as the first argument)
input_dir="$1"
# Check if the provided argument is a valid directory
if [ ! -d "$input_dir" ]; then
echo "Error: Directory $input_dir does not exist."
exit 1
fi
# Directory to save converted JPG images
output_dir="$input_dir/output"
# Create output directory if it doesn't exist
mkdir -p "$output_dir"
# Loop through each HEIC file in the input directory
for file in "$input_dir"/*.heic; do
# Check if there are no HEIC files
if [ ! -e "$file" ]; then
echo "No HEIC files found in $input_dir."
exit 1
fi
# Get the base name of the file (without extension)
base_name=$(basename "$file" .heic)
# Convert HEIC to JPG
magick convert "$file" "$output_dir/$base_name.jpg"
done
echo "Conversion completed. JPG images are saved in $output_dir."
Παίξτε με του magick τα flags για καλύτερη ή χειρότερη ποιότητα σε output jpg's ;)
Για να προσαρμόσεις την ποιότητα των εξαγόμενων αρχείων JPG με τη χρήση του magick, μπορείς να χρησιμοποιήσεις την επιλογή -quality. Η ποιότητα μπορεί να ρυθμιστεί από 1 (χειρότερη) έως 100 (καλύτερη).
Παράδειγμα με βελτιωμένο script
Παρακάτω είναι το ανανεωμένο script που σου επιτρέπει να καθορίσεις την ποιότητα των εξαγόμενων JPG αρχείων μέσω μιας επιπλέον επιλογής:
#!/bin/bash
# Έλεγχος αν δόθηκαν επιχειρήματα
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: $0 <input_directory> <quality>"
echo "Example: $0 /path/to/heic/images 85"
exit 1
fi
# Διεύθυνση εισόδου που περιέχει τις εικόνες HEIC (παρέχεται ως πρώτο επιχείρημα)
input_dir="$1"
# Ποιότητα εξαγόμενων JPG (παρέχεται ως δεύτερο επιχείρημα)
quality="$2"
# Έλεγχος αν ο παρεχόμενος φάκελος είναι έγκυρος
if [ ! -d "$input_dir" ]; then
echo "Error: Directory $input_dir does not exist."
exit 1
fi
# Δημιουργία φακέλου εξόδου μέσα στον φάκελο εισόδου
output_dir="$input_dir/output"
mkdir -p "$output_dir"
# Διατρέχει κάθε αρχείο HEIC στον φάκελο εισόδου
for file in "$input_dir"/*.heic; do
# Έλεγχος αν υπάρχουν αρχεία HEIC
if [ ! -e "$file" ]; then
echo "No HEIC files found in $input_dir."
exit 1
fi
# Απόκτηση του βασικού ονόματος του αρχείου (χωρίς την επέκταση)
base_name=$(basename "$file" .heic)
# Μετατροπή HEIC σε JPG με την καθορισμένη ποιότητα
magick convert "$file" -quality "$quality" "$output_dir/$base_name.jpg"
done
echo "Conversion completed. JPG images are saved in $output_dir with quality $quality."
Χρήση του 2ου script με
./convert_heic_to_jpg.sh /path/to/heic/images 85
όπου 85 θα είναι η ποιότητα..
Have fun ! 💪