Pendahuluan (singkat & mudah)
Kalau kamu punya banyak foto di satu folder dan ingin mengubah ukurannya sekaligus — misalnya membuat versi web (lebar 800px) — tapi tetap mau menyimpan foto asli di folder asal, ImageMagick sangat cocok untuk tugas ini. Di bawah ada beberapa metode: perintah cepat (single directory), skrip rekursif (memproses subfolder), dan contoh untuk Windows PowerShell.
Catatan penting:
Jangan gunakan mogrify
tanpa opsi -path
jika kamu ingin menyimpan salinan; mogrify
defaultnya menimpa file asli. Gunakan -path
atau pakai loop dengan magick
(alias convert
di versi lama).
Prasyarat
- ImageMagick terpasang — cek dengan
magick -version
atauconvert -version
. - Akses terminal (Linux/macOS) atau PowerShell (Windows).
- Pahami bahwa path berisi spasi harus diberi tanda kutip.
Metode 1 — Cepat: Semua file di satu folder (Linux/macOS)
Metode paling singkat: pakai mogrify -path
— hasil akan ditulis ke folder tujuan, file asli tetap utuh.
# Buat folder tujuan
mkdir -p ../resized
# Resize semua JPG di folder saat ini menjadi lebar 800px (tinggi menyesuaikan)
magick mogrify -path ../resized -resize 800x -strip -quality 85 *.jpg
Penjelasan singkat:
-path ../resized
→ simpan hasil di folder ../resized
(relatif).
-resize 800x
→ ubah lebar jadi 800px (tinggi menyesuaikan). Gunakan 800x800>
untuk hanya mengubah gambar yang lebih besar dari 800x800. -strip
menghapus metadata, -quality 85
mengatur kualitas JPEG.
Metode 2 — Loop per-file (lebih fleksibel)
Kalau mau kontrol lebih (mis. ubah format ke PNG, atau tambahkan watermark per-file), gunakan loop:
mkdir -p ../resized
for f in *.jpg; do
magick "$f" -resize 800x -strip -quality 85 "../resized/${f%.*}.jpg"
done
Kelebihan: bisa mengubah ekstensi, menambahkan opsi per-file, atau memproses hanya tipe tertentu.
Metode 3 — Rekursif: proses subfolder & simpan struktur (Linux/macOS)
Jika folder berisi subfolder dan kamu ingin mempertahankan struktur (mis. photos/2023/
→ resized/2023/
), gunakan kombinasi find
+ magick
:
#!/bin/bash
# rekursif-resize.sh
# Jalankan dari root folder foto (mis: /home/user/photos)
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#./}" # hapus leading ./
dst="$OUTDIR/$(dirname "$rel")" # buat path destinasi sesuai struktur
mkdir -p "$dst"
magick "$file" -resize 800x -strip -quality 85 "$dst/$(basename "$rel")"
done
Script di atas membuat folder resized/
dan menyalin setiap file terresize ke lokasi yang sesuai, sehingga struktur internal tetap sama.
Metode 4 — Contoh: hanya mengubah gambar yang lebih besar dari ukuran target
Gunakan operator >
di argumen resize agar gambar yang lebih kecil dari target tidak diperbesar:
# contoh singkat
magick mogrify -path ../resized -resize 800x800\> -strip -quality 85 *.jpg
Perhatikan backslash \
untuk menghindari interpretasi shell pada tanda >
. Di banyak shell, menuliskan argumen sebagai "800x800>"
juga aman.
Contoh Skrip Lengkap (Linux) — simpan & jalankan
Simpan contoh berikut sebagai batch-resize.sh
, beri izin eksekusi, lalu jalankan di folder foto:
#!/bin/bash
# batch-resize.sh
# Usage: ./batch-resize.sh /path/to/source /path/to/destination 800
SRC="${1:-.}"
DST="${2:-./resized}"
SIZE="${3:-800}"
mkdir -p "$DST"
cd "$SRC" || exit 1
find . -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) -print0 |
while IFS= read -r -d '' file; do
rel="${file#./}"
outdir="$DST/$(dirname "$rel")"
mkdir -p "$outdir"
magick "$file" -resize "${SIZE}x" -strip -quality 85 "$outdir/$(basename "$rel")"
done
echo "Selesai. Hasil ada di: $DST"
Contoh pemakaian: ./batch-resize.sh . ../resized 800
Contoh untuk Windows (PowerShell)
Jika kamu memakai Windows + ImageMagick (magick di PATH), contoh PowerShell berikut memproses rekursif dan menyimpan hasil ke folder baru:
# PowerShell (jalankan di folder root foto)
$src = "C:\Users\User\Pictures"
$dst = "C:\Users\User\Pictures_resized"
$size = "800x"
Get-ChildItem -Path $src -Recurse -File -Include *.jpg,*.jpeg,*.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
$outPath = Join-Path $outDir $_.Name
magick $_.FullName -resize $size -strip -quality 85 $outPath
}
Sesuaikan variable $src
dan $dst
sebelum menjalankan.
Tips & Troubleshooting
- Periksa versi ImageMagick:
magick -version
(pastikan binary bernamamagick
atau gunakanconvert
untuk versi lama). - Jika file memiliki spasi, selalu bungkus path dengan tanda kutip:
"path/file name.jpg"
. - Gunakan
-strip
untuk menghapus metadata (EXIF) bila ingin mengurangi ukuran file. - Sesuaikan
-quality
(mis. 75–90) untuk trade-off kualitas/ukuran. - Uji skrip di beberapa file dulu sebelum memproses ribuan foto.
Ringkasan singkat
Untuk menyimpan hasil resize ke folder lain dan menjaga file asli tetap berada di folder asal, gunakan:
# singkat (satu folder)
mkdir -p ../resized
magick mogrify -path ../resized -resize 800x -strip -quality 85 *.jpg
Atau pakai skrip rekursif jika ada banyak subfolder — contoh skrip sudah diberikan di atas.