🖼️ Batch Resize Foto dengan ImageMagick — Simpan ke Folder Terpisah

Pendahuluan

Halo! Kalau kamu punya ratusan foto dalam satu folder dan ingin mengecilkan ukurannya sekaligus (misal buat kebutuhan web selebar 800px) tapi tidak mau ngerusak foto aslinya, ImageMagick adalah solusinya. 🚀

🚨 Catatan Penting:
Jangan asal pakai perintah mogrify tanpa opsi -path ya, karena secara default dia bakal menimpa file asli kamu. Selalu gunakan -path atau gunakan loop manual biar aman.

Prasyarat

  • Pastikan ImageMagick sudah terpasang (cek dengan magick -version).
  • Bisa buka Terminal (Linux/macOS) atau PowerShell (Windows).
  • Siapkan folder tujuan sebelum eksekusi.

Metode 1 — Cepat (Linux/macOS)

Paling praktis buat file yang numpuk di satu folder. Kita pakai mogrify dengan folder tujuan.

# Buat folder tujuan
mkdir -p ../resized
# Resize semua JPG jadi lebar 800px, hapus metadata, kualitas 85%
magick mogrify -path ../resized -resize 800x -strip -quality 85 *.jpg

Hasilnya bakal masuk ke folder ../resized, file asli kamu tetap aman di tempatnya.

Metode 2 — Loop Manual (Fleksibel)

Kalau kamu ingin lebih teliti, misalnya sambil ganti format ke PNG, pakai cara loop ini:

mkdir -p ../resized
for f in *.jpg; do
 magick "$f" -resize 800x -strip -quality 85 "../resized/${f%.*}.jpg"
done

Metode 3 — Rekursif (Masuk ke Subfolder)

Apabila struktur direktori memiliki beberapa subfolder di dalamnya, konfigurasi skrip ini dirancang untuk memproses penyesuaian ukuran gambar tanpa mengubah susunan folder asal.

#!/bin/bash
OUTDIR="resized"
mkdir -p "$OUTDIR"
find . -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) -print0 |
while IFS= read -r -d '' file; do
 rel="${file#./}"
 dst="$OUTDIR/$(dirname "$rel")"
 mkdir -p "$dst"
 magick "$file" -resize 800x -strip -quality 85 "$dst/$(basename "$rel")"
done

Metode 4 — Windows PowerShell

Buat pengguna Windows, kamu bisa pakai perintah PowerShell yang keren ini:

$src = "C:\Folder\FotoAsli"
$dst = "C:\Folder\FotoHasil"
Get-ChildItem -Path $src -Recurse -File -Include *.jpg,*.png | ForEach-Object {
 $rel = $_.FullName.Substring($src.Length).TrimStart('\')
 $outDir = Join-Path $dst (Split-Path $rel -Parent)
 New-Item -ItemType Directory -Path $outDir -Force | Out-Null
 magick $_.FullName -resize 800x -strip -quality 85 (Join-Path $outDir $_.Name)
}

Tips Jitu

  • Gunakan -strip untuk membuang data EXIF biar file makin ringan.
  • Kualitas -quality 85 biasanya sudah sangat cukup buat web.
  • Bungkus nama file dengan tanda kutip "$file" kalau nama fotonya ada spasinya.