Toplu Görsel Dönüştürme Akışı Nasıl Kurulur?
Projeye WebP veya AVIF formatına geçme kararı alındığında, kararın kendisi kısa sürer. Asıl iş mevcut arşivdeki görselleri dönüştürmekte — bir sitede yüzlerce, e-ticaret projelerinde binlerce görsel olabilir. Her birini ayrı ayrı açıp dönüştürmek hem zaman kaybı hem de tutarsızlık riski. Kalite ayarı farklı mı oldu, bazı dosyalar atlandı mı, yeni eklenen görseller eski formatta mı kaldı? Bu soruları ortadan kaldıran tek yol otomatize edilmiş bir dönüştürme akışı kurmak. Az sayıda dosya için ya da akış kurulmadan önce formatı test etmek amacıyla çevrimiçi resim dönüştürme aracı hızlı bir alternatif olarak değerlendirilebilir.
Toplu dönüştürme ihtiyacı yalnızca format geçişinde ortaya çıkmıyor. İçerik ekibinin yüklediği görsellerin belirli boyut sınırını aşması, sıkıştırma ayarının standardize edilmesi veya yeni bir görsel CDN'e taşınma sürecinde de aynı sorun gündeme geliyor. Çözüm her durumda benzer: giriş klasörünü tara, her dosyaya dönüşüm uygula, çıkışı belirlenmiş konuma yaz.
Hangi aracın hangi senaryoya uyduğu ve akışın nasıl kurulduğu aşağıda sırasıyla ele alınıyor.
Araç seçimi: cwebp, ImageMagick ve sharp
Toplu dönüştürme için en yaygın üç araç farklı bağlamlara hizmet ediyor. cwebp, Google'ın resmi WebP encoder komut satırı aracı. Yalnızca WebP çıkışı üretiyor; başka formata dönüştürme yok. Fakat WebP kalitesi ve sıkıştırma parametreleri üzerinde tam kontrol sağlıyor. Bash veya shell scripti içinde döngüyle kullanıldığında klasör bazlı toplu dönüşüm için yeterli.
ImageMagick çok daha geniş format desteğiyle öne çıkıyor: JPG, PNG, WebP, AVIF ve onlarca format arasında dönüşüm yapabiliyor. mogrify komutu yerinde dönüştürme için, convert yeni dosya üretimi için kullanılıyor. Karmaşık dönüşüm zincirlerini — yeniden boyutlandırma, sıkıştırma — tek komutta birleştirmeye izin veriyor. Sharp ise Node.js tabanlı yüksek performanslı bir görsel işleme kütüphanesi. libvips üzerine kurulu, büyük arşivlerde ImageMagick'ten çok daha hızlı. JavaScript veya TypeScript ile yazılan build script içinde kullanıldığında güçlü bir seçenek; özellikle Next.js veya Eleventy gibi framework tabanlı projelerde doğal entegrasyonu var.
Klasör bazlı otomasyon: temel akış yapısı
En basit toplu dönüştürme akışı bir shell scriptiyle kurulabiliyor. find ile girdi klasöründeki tüm JPG ve PNG dosyaları listeleniyor, döngüde her dosyaya dönüşüm uygulanıyor, çıktı farklı bir klasöre yazılıyor. Orijinal dosyaları korumak kritik — dönüştürme işlemi sırasında sorun çıkarsa kaynağa geri dönmek gerekiyor.
cwebp ile basit bir WebP dönüştürme döngüsü şöyle görünüyor: find ./images -name "*.jpg" | while read f; do cwebp -q 82 "$f" -o "${f%.jpg}.webp"; done. Bu komut images klasöründeki tüm JPG dosyalarını 82 kalite ayarıyla WebP'ye çeviriyor. ImageMagick ile aynı işlem daha kısa: mogrify -format webp -quality 82 -path ./output ./images/*.jpg. -path parametresi çıktı klasörünü belirliyor; orijinaller dokunulmadan kalıyor. Boyutlandırma eklemek için -resize 1200x gibi parametreler aynı komuta ekleniyor; boyut küçültme ve format dönüşümü böylece tek geçişte birleştiriliyor.
Node.js ile sharp: programatik akış
JavaScript ekosisteminde çalışan projelerde sharp, toplu dönüşüm için daha esnek bir yapı sunuyor. Temel akış: fs.readdirSync ile girdi klasörü okunuyor, her dosya için sharp çağrılıyor, çıktı formatı ve kalitesi belirleniyor, sonuç yazılıyor. Tüm bu adımlar Promise.all ile paralel yürütülebiliyor — büyük arşivlerde işlem süresi önemli ölçüde kısalıyor.
Sharp'ın avantajı zincirleme işlemlerde belirginleşiyor. Tek bir çağrıda yeniden boyutlandırma, format dönüşümü, kalite ayarı ve metadata temizleme birlikte yapılabiliyor. EXIF ve metadata temizleme için .withMetadata(false) seçeneği ekleniyor; bu adım dosya boyutunu ek olarak küçültüyor. Build pipeline entegrasyonu için sharp tabanlı script bir npm komutu olarak tanımlanabiliyor: "optimize-images": "node scripts/convert-images.js" satırı package.json'a eklendiğinde her ekip üyesi aynı akışı tek komutla çalıştırabiliyor.
Tutarlılık ve hata yönetimi
Toplu dönüştürmenin en büyük riski sessiz hatalar. Bir dosya bozuksa veya desteklenmeyen bir format içeriyorsa komut hata veriyor fakat döngü devam edebiliyor — ve o dosya dönüştürülmeden geçiliyor. Sonuç klasöründe eksik dosyalar olduğu ancak karşılaştırma yapılana kadar fark edilmiyor.
Bu riski azaltmak için birkaç pratik var. Önce küçük bir örnekle test etmek: 5-10 dosyayı dönüştürüp kalite ve boyutu kontrol ettikten sonra tüm arşive uygulamak. Komut çıktısını bir log dosyasına yönlendirmek, başarılı ve başarısız dönüşümlerin listesini tutuyor. Giriş ve çıktı dosya sayılarını karşılaştırmak: döngü bittikten sonra ls | wc -l ile her iki klasörün dosya sayısını kıyaslamak eksikleri hemen ortaya koyuyor. Boyutlandırmayla birlikte dönüştürme yapılıyorsa, orijinal görsel hedef boyuttan küçük olabilir; sharp'ın .resize({ width: 1200, withoutEnlargement: true }) seçeneği bu durumda büyütmeyi engelliyor.
Yeni görseller için sürekli akış
Arşiv dönüşümü bir kez yapılıyor fakat yeni görseller sürekli ekleniyor. Bu sorunu çözmenin yolu, dönüştürme adımını içerik yükleme sürecine dahil etmek. CMS tabanlı projelerde yükleme hook'u dönüştürme scriptini otomatik çalıştırabiliyor. Static site generatörlerinde build adımı görsel işlemeyi kapsıyor. Daha basit bir yaklaşım: içerik ekibinin yüklediği klasörü izleyen bir watcher script. Yeni dosya eklendiğinde dönüştürme scripti tetikleniyor.
Görsel CDN kullanan projelerde bu sorun farklı çözülüyor: CDN'e orijinal dosya yükleniyor, format dönüşümü ve boyutlandırma CDN tarafında URL parametresiyle talep anında yapılıyor. Bu model yerel dönüştürme akışı kurmaya gerek bırakmıyor fakat CDN maliyeti ve vendor bağımlılığı söz konusu oluyor. Hangi yaklaşımın seçildiği büyük ölçüde projenin altyapısına ve ekip kapasitesine bağlı.
Toplu dönüştürme akışı kurmak, tek seferlik bir çaba gibi görünse de içerik sürecini kalıcı olarak etkiliyor. Arşiv temizlendikten ve yeni görsel akışı otomatize edildikten sonra format kararları gelecekte çok daha az sürtünmeyle uygulanabiliyor. WebP'den AVIF'e geçiş söz konusu olduğunda ya da yeni bir boyut standardı belirlendiğinde, akış yalnızca parametre değişikliğiyle güncelleniyor.
Hangi araç seçilirse seçilsin, önce küçük ölçekte test etmek ve orijinal dosyaları korumak temel kural olmaya devam ediyor. Dönüştürme hataları sessiz geçebilir; karşılaştırma ve sayım adımları bu hataları yüzeye çıkaran en hızlı yöntem.