lefteros_by SomniusX
EN ↗Πες ένα γεια

25 Ιουλίου 2024 / Lefteris Iliadis (SomniusX)

Heic 2 Jpg με χρήση ImageMagick [bash / cross-platform]

25 Ιουλίου 2024

Μου έδωσαν ένα usb από τον παιδικό της μικρής μας με πολλές φωτογραφίες μέσα να είναι heic.. λέω wtf?! Οπότε ας τις μετατρέψουμε αναλόγως :P

Μου έδωσαν ένα usb από τον παιδικό της μικρής μας με πολλές φωτογραφίες μέσα να είναι heic.. λέω wtf?! Οπότε ας τις μετατρέψουμε αναλόγως :P

Αυτό το script κάνει τα εξής:

  1. Έλεγχος αν δόθηκε flag: Το script πρώτα ελέγχει αν έχει δοθεί ένας φάκελος ως flag ($1). Αν όχι, εμφανίζει ένα μήνυμα χρήσης και τερματίζει.
  2. Έλεγχος εγκυρότητας φακέλου: Επιβεβαιώνει ότι ο παρεχόμενος φάκελος υπάρχει.
  3. Δημιουργία φακέλου εξόδου: Δημιουργεί έναν υποφάκελο output μέσα στον φάκελο που περιέχει τις εικόνες HEIC.
  4. Μετατροπή αρχείων HEIC σε JPG: Διατρέχει κάθε αρχείο .heic στον φάκελο εισόδου και το μετατρέπει σε .jpg, αποθηκεύοντας το αποτέλεσμα στον υποφάκελο output. Αν δεν βρεθούν αρχεία .heic, εμφανίζει ένα μήνυμα και τερματίζει.
  5. Εμφάνιση μηνύματος ολοκλήρωσης: Εμφανίζει ένα μήνυμα ότι η μετατροπή ολοκληρώθηκε και ότι οι εικόνες 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 ! 💪