1 puan yazan levish 4 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Backend tarafında kullanıcı görsel yüklemeleri alınırken sessizce beraberinde gelen bazı sorunlar vardır.

  • JPEG içinde GPS koordinatları, cihaz model adı ve çekim zamanı EXIF olarak yer alabilir
  • ICC profili gibi renk meta verileri de olduğu gibi saklanıp dağıtılabilir
  • JPEG, PNG, GIF ve WebP karışık şekilde gelirse depolama/CDN/rendering pipeline'ı karmaşıklaşır
  • Yalnızca EXIF orientation yanlış işlense bile görsel 90° dönmüş halde kaydedilebilir

smol-image-processor, bu sorunları topluca ele alan tek amaçlı bir mikroservistir.

Nasıl çalışır

Görseli POST /process uç noktasına multipart/form-data olarak yüklediğinizde, yanıt her zaman WebP olarak
döner. Sharp'ın varsayılan çıktı davranışının kaynak EXIF, ICC profili ve benzeri meta verileri
atma özelliğinden doğrudan yararlanır. Ancak EXIF orientation, meta veriler kaldırılmadan
önce .rotate() ile önce piksellere uygulanır; böylece görsel yönü korunur.

İki savunma katmanı vardır.

  • Piksel sayısı sınırı (MAX_PIXELS): Dosya boyutu küçük olsa bile decode edildiğinde yüz milyonlarca piksele
    şişen görselleri (decompression bomb), Sharp'ın limitInputPixels özelliğiyle engeller.
  • Kare sayısı sınırı (MAX_PAGES): Yüzlerce ya da binlerce kare içeren animasyonlu GIF/WebP dosyalarıyla
    bellek ve CPU'yu tüketen DoS saldırılarını önler.

Animasyonlu GIF/WebP dosyaları animated WebP'ye dönüştürülür ve kare gecikmeleri ile döngü sayısı
korunur. PNG'nin alfa kanalı da olduğu gibi korunur.

Yanıt başlıklarında işlenen görselin width, height, size, animated olup olmadığı ve sayfa sayısı
yer alır; böylece ayrı bir meta veri çıkarma adımı olmadan doğrudan DB'ye kaydedilebilir.

Yığın

  • Runtime: Bun, HTTP framework: Elysia
  • Görsel işleme: Sharp (libvips sarmalayıcısı)
  • Docker imajı sağlanır (GHCR)

Hızlı başlangıç

docker run --rm -p 6701:6701 ghcr.io/levish0/smol-image-processor
curl -F file=@photo.jpg http://localhost:6701/process -o clean.webp

https://github.com/levish0/smol-image-processor

Henüz yorum yok.

Henüz yorum yok.