LUVI'ye yüklediğiniz her görsel neden JPEG ya da PNG oluyor?

iPhone'un HEIC fotoğrafları Chrome'da hata veriyordu, WebP modellerin yarısını şaşırtıyordu, bir kütüphanenin tarayıcı çözücüsü 12 megapiksellik kareye 27 saniye harcıyordu. Dönüştürmeyi sunucuya taşıdık ve tek kural koyduk: her görsel, renk profili ve yönü korunarak JPEG ya da PNG olarak saklanır.

Yayın:

Onlarca renkli yarı saydam kart çivit rengi bir ışık noktasından geçip iki kareye dönüşüyor: biri parlak beyaz, diğeri saydam damalı.

Görsel yükleme, bir üretim platformunun en sıkıcı parçası gibi görünür. Bizde ise en inatçı destek e-postası kaynağıydı. Neyin ters gittiğini, neleri denediğimizi ve sorunu çözen kuralı anlatıyoruz.

Ne ters gidiyordu?

HEIC. Her iPhone varsayılan olarak bu formatta çeker. Safari açabiliyor; Chrome ve Firefox açamıyor. Chrome'dan telefon fotoğrafı yükleyen bir kullanıcı ya hata alıyor ya da hiçbir modelin kabul etmediği bir dosyayla kalıyordu.

WebP ve AVIF. Tarayıcılar bayılıyor; model sağlayıcıları sevmiyor. Bazı modeller doğrudan reddediyor, bazıları kabul edip sonra sessizce çöküyordu.

Yön ve renk. Yan çekilmiş bir fotoğraf, kimi çözücünün uyduğu kimi çözücünün yok saydığı bir döndürme etiketi taşır. Bir iPhone fotoğrafı ise Display P3 renk profili taşır; bu profil dönüştürmede düşürülünce görüntü soluk kalır.

Neden tarayıcıda dönüştürmedik?

Akla ilk gelen, yüklemeden önce tarayıcıda dönüştürmektir. Bir WebAssembly HEIC çözücüsü yayınladık ve aynı gün öldü: kütüphane, worker'ını (arka planda çalışan iş parçacığını) new Function ile derliyor; uygulamayı enjekte edilmiş betiklerden koruyan İçerik Güvenliği Politikamız (CSP) buna izin vermiyor. Chrome'daki her HEIC yüklemesi EvalError fırlattı.

Kütüphanenin CSP ile uyumlu sürümü çalıştı, ama 12 megapiksellik bir fotoğrafın çözülmesi dizüstü bilgisayarda 27 saniye sürdü. Aynı dosya sunucuda 1,4 saniye alıyor. Üstelik HEIC, ürettiği JPEG'den zaten küçüktü; cihazda dönüştürmek bant genişliğinden de tasarruf ettirmiyordu. Tarayıcı çözücüsünü kaldırdık.

Şimdi kural ne?

Her görsel JPEG ya da PNG olarak saklanır. Format dosya adından ya da içerik türünden değil, baytlardan okunur: .png adlı bir JPEG, JPEG olarak saklanır. JPEG ve PNG yüklemeleri bayt bayt korunur. Geri kalan her şey sunucuda dönüştürülür:

  • Herhangi bir piksel saydamsa PNG; böylece hiçbir şey bir arka plana yapıştırılıp düzleştirilmez.
  • Değilse tam renk örneklemesiyle, 92 kalitede JPEG.
  • EXIF döndürmesi uygulanır; saklanan görsel dik durur.
  • Gömülü renk profili taşınır; iPhone'un Display P3 görseli telefonda göründüğü gibi çıkar.
  • Hareketli GIF ya da WebP ilk karesini korur; SVG, uzun kenarı 2.048 piksel olacak şekilde rasterleştirilir.

Çözme yığını belirli parçalardan oluşur: WebP, GIF, AVIF, TIFF ve SVG için tek kütüphane; HEIC için ayrı bir çözücü (genel amaçlı olan yalnızca AV1 çeşidini açıyor); görsel kütüphanesinde bulunmadığı için küçük bir BMP okuyucu. ICO, PSD ve JPEG XL dönüştürülemez; anlaşılır bir mesajla reddedilir.

Dönüştürme nerede çalışır?

Her giriş noktası aynı fonksiyondan geçer: yükleme penceresi, URL'den yükleme, büyük dosyaların kullandığı doğrudan depolamaya yazma yolu ve Claude için bağlantının yükleme bileti. Dosya zaten depodaysa geri okunur, dönüştürülür, yeni adıyla yazılır ve orijinal ancak ondan sonra silinir. Yükleme yanıtı size saklanan dosyanın adını ve neyden dönüştürüldüğünü söyler.

Sizin için ne değişti?

Telefon fotoğrafları her tarayıcıda yükleniyor. Her model, kabul ettiği bir format alıyor. İndirdiğiniz dosyayı her uygulama açıyor. Dönüştürme de bizim tarafta, bir kez, yaklaşık bir saniye sürüyor.

Sınırlar, hatırlatma olarak: görseller 50 MB'a kadar; video, ses, 3B ve PDF 1 GB'a kadar. Kabul edilen formatların tam listesi yardım merkezinde: hangi dosya formatlarını ve boyutlarını yükleyebilirim? ve HEIC ya da WebP yüklemem neden JPEG'e dönüştü?

Sorular

Kalite kaybı olur mu?

JPEG ve PNG yüklemeleri bayt bayt aynı saklanır. Diğer formatlar bir kez, yüksek kalitede yeniden kodlanır: saydamlık varsa PNG, yoksa renk alt örneklemesi olmadan 92 kalitede JPEG.

HEIC'i de neden saklamıyorsunuz?

Çünkü sonraki hiçbir adım onu güvenilir biçimde okumuyor: modellerin çoğu reddediyor, tarayıcılar aralarında anlaşamıyor. Dönüştürülen dosya, her modelin, her tarayıcının ve her indirmenin kullanabildiği dosyadır.

Hâlâ reddedilen ne var?

ICO, PSD ve JPEG XL. Önce JPG ya da PNG olarak kaydedin.

Devamı LUVI'nin içinden