Bir JPG'yi 100 KB'ın altına nasıl boyutlandırabilirim?
Bir 538.6 KB fotoğraf için ölçülen kalite merdiveni, kaydırıcının neden 131 KB'da takıldığı ve neden piksel kesmenin aslında bir byte bütçesine ulaşan kol olduğu.
· Updated
Bir yükleme formu maksimum 100 KB diyor. Fotoğrafınız 538.6 KB. Refleks, kalite kaydırıcısını alıp sola çekmek, ve büyük bir fotoğraf için bu refleks sizi oraya götürmeyecek. Bir dosya aldık ve tüm merdiveni çalıştırdık: texture.jpg 3840x2160, disk üzerinde 538.6 KB. Kalite 30'da bile 131 KB'ye ulaşıyor ve o noktada resim görünür şekilde bozulmuş durumda.
JPEG boyutunu gerçekten kontrol eden sayı piksel sayısıdır. Temel JPEG resmi 8x8 bloklar halinde kodlar, bu nedenle her iki boyutu yarıya indirmek, saklamak için blokların dörtte birini bırakır. Eğer sadece kaydırıcınız varsa, bu boyuttaki bir dosyada 131 KB civarında takılı kalırsınız. Aşağıdaki her rakam, bir tarayıcı sekmesinde çalışan kendi sıkıştırıcı ve boyutlandırıcımızdan geldi. Beklemeniz gereken bir yükleme adımı yok.
Kalite kaydırıcısı beni neden 100 KB'ye ulaştıramıyor?
İşte merdiven, her seferinde aynı kaynak dosya, resim sıkıştırıcısında manuel modda çalıştırıldı. Akıllı mod, her kodlayıcının kendi varsayılanını seçer, bu JPEG ve WebP için 80, AVIF için 63 ve PNG için kayıpsızdır.
| Ayar | Çıktı | Değişim |
|---|---|---|
| Kaydırıcı 90 | 347.8 KB | -35% |
| Akıllı (kaydırıcı 80) | 286.1 KB | -47% |
| Kaydırıcı 60 | 212.4 KB | -61% |
| Kaydırıcı 30 | 131 KB | -76% |
Kaydırıcıdaki altmış puan 216.8 KB kazandırdı. Son aşama, 60'dan 30'a kadar, 81.4 KB için çok fazla görünür detay kaybetti. 3840x2160 boyutundaki bir fotoğraf 8.3 milyon pikseli tanımlamak zorundadır ve o boyutta ne kadar az byte ile tanımlanabileceğine dair bir taban vardır. Taban gerçektir.

Kalite 30 neden gerçekten 30 değil?
Bu, insanları zor durumda bırakan bir durumdur ve bunu açıklamak bizim görevimiz. Kaynak bir JPEG olduğunda, sıkıştırıcımız dosyanın ilk 64 KB'ından kuantizasyon tablolarını okur ve kaydedildiği kaliteyi tahmin eder. Kaydırıcınız bu tahmini ölçeklendirir. Kalite 60'da kaydedilen bir fotoğraf, kaydırıcı 80'deyken 48 olarak kodlanır. Yeniden ölçeklendirme, ikinci bir geçişin piksellerin sunamayacağı kaliteyi talep etmesini engeller, çünkü kalite-60 dosyasını 90'da yeniden kodlamak, zaten yerleşmiş hasarı tanımlamak için byte harcamaktır. Altındaki kodlayıcı MozJPEGdir. Bilinmesi gereken bir şey daha: sıkıştırma, her türlü meta veriyi, EXIF, GPS, ICC profili ve gömülü küçük resmi kaldırır. Yönlendirme hayatta kalır.
Kaydırıcının yanındaki tahmin neden sonuçla eşleşmiyor?
Çünkü bu bir eğri, bir kodlama değil. Panel, herhangi bir şey çalışmadan önce bu sayıyı yalnızca iki şeyden: dosya boyutunuzdan ve kaydırıcı konumundan alır. Bu, orijinal byte'ların kaydırıcı ile 100'e bölünüp 1.8 kuvvetine yükseltilmesiyle elde edilir. Hiçbir pikselinizi görmez ve yukarıdaki yeniden ölçeklendirmeden de haberdar değildir, bu nedenle kalite-60 örneğinde 80 için bir rakam verirken kodlayıcı 48 kullanmaya hazırlanıyor.
Aynı 538.6 KB test dosyasında fark geniştir ve aralık boyunca yön değiştirir. Kaydırıcı 90'da panel 445.5 KB tahmin etti, gerçek 347.8 KB'ye karşı, %28 yüksek. Kaydırıcı 30'da 61.7 KB tahmin etti, gerçek 131 KB'ye karşı, %53 düşük. Eğer 100 KB sınırına ulaşmayı hedefliyorsanız, o ikinciyi tekrar okuyun: tahmin, kodlayıcının 31 KB kaçırmak üzere olduğu anda 38 KB'yi geçtiğinizi söylüyor. Sonuç kartındaki KB, harekete geçmeye değer tek rakamdır. Palet PNG modunda hiç tahmin yoktur ve panel bunun yerine bir uyarı yazdırır.
Bir JPG'yi 100 KB'ın altına nasıl alabilirim?
Önce pikselleri kesin, sonra sıkıştırın. Boyutlandırıcıyı açın ve %25, %50 ve %75 olan yüzde ön ayarlarını kullanın. Yüzde elli, 3840x2160 boyutunu 1920x1080'e, piksellerin dörtte birine düşürür. Yüzde yirmi beş, bunu 960x540'a, altıda birine düşürür. Ayrıca, 1080x1080 Instagram karesinden 2560x1440 YouTube afişine kadar sabit boyutlarda 15 sosyal ön ayar vardır, ayrıca kaplama, içerme ve uzatma modları ile tam piksel modu vardır. O tam piksel modu, 600 x 600 pasaport karesinin bir yüzü sıkıştırmadan yazılmasını sağlar. Eğer 4K bir fotoğraftan 100 KB hedefliyorsanız, %25 ile başlayın ve yukarı doğru çalışın.
Boyutlandırıcı ile ilgili bilmeniz gereken iki şey var. PNG çıktısı kayıpsız kalır ve diğer tüm formatlar varsayılan olarak kalite 90'da yeniden kodlanır, bu nedenle her iki araçtan geçen bir JPEG iki kez kodlanır. Animasyonlu kaynaklar bir sabit çerçeve olarak çıkar. Ve sıkıştırıcının çıktısı, beslediğiniz dosyadan daha büyük olursa, orijinalinizi dokunulmadan geri verir.
WebP veya AVIF beni daha hızlı ulaştırır mı?
| Kodlayıcı | Kaydırıcı 80 | Kaydırıcı 63 |
|---|---|---|
| JPEG | 286.1 KB | ölçülmedi |
| WebP | 290.3 KB | 200.6 KB |
| AVIF | 312.7 KB | 186.9 KB |
O tabloyu iki kez okuyun. Aynı kaydırıcı pozisyonunda 80'de, JPEG en küçük dosyayı üretirken AVIF en büyük dosyayı üretti, bu da yukarıdaki yeniden ölçeklendirmeyi hatırlayana kadar ters görünüyor. JPEG'nin 80'i, kaynağın kendi tahmin edilen kalitesine karşı ölçeklendi, bu nedenle gerçekten 80 değildi, oysa WebP ve AVIF sayıyı harfiyen alır. Onları AVIF'nin akıllı varsayılanı olan 63'e düşürün ve modern kodekler öne geçer: WebP için 200.6 KB, AVIF için 186.9 KB. Her ikisi de 3840x2160'da 100 KB'den hala çok uzaktır, bu da tüm amacıdır. AVIF ayrıca bu makinede her kodlama için yaklaşık 10 ila 11 saniye aldı, oysa JPEG ve WebP anında geri döndü ve tarayıcı desteği daha yenidir. Bizim JPG'den WebP'ye yolumuz 4:2:0 kromaya kilitlidir, bu nedenle sert kırmızı kenarlar biraz yumuşar.
Dosyam şeffaflığı olan bir PNG ise ne olur?
Tamamen farklı bir kol. Alpha.png, 900x606 ve gerçek bir alfa kanalı ile 942.4 KB'yi her iki PNG modundan geçirdik. "Sıkıştırma yok" seçeneği, oxipng seviyesinde 3, tamamen kayıpsızdır ve 383.9 KB döndürdü, her pikselin sağlam kaldığı %59 kesim. "Daha küçük dosya boyutu" seçeneği, resmi bir palete indirgemek için libimagequant kullanır ve 98.3 KB döndürdü. Bu %90 indirimdir ve boyutları değiştirmeden 100 KB bütçesini aşar. Paletler pürüzsüz gradyanları bantlar, bu nedenle göndermeden önce bir gökyüzü veya yumuşak bir gölgeyi kontrol edin. Şeffaflık her iki modda da hayatta kalır. JPEG çıktısı talep ederseniz alfa kanalı kaybolur, beyaz üzerine matlanır.
100 KB'ye ulaşmak için kesme işlemi yapabilir miyim?
Kısmen. Kesme işlemi pikselleri kaldırır, bu nedenle byte'ları da kaldırır. Bizim kesici bir seferde 10 MB'a kadar bir dosya alır ve sekiz en boy oranı ön ayarı sunar. Piksel cinsinden bir hedef genişlik yazmak için bir alan yoktur, bu nedenle kesin bir çıktı boyutuna ulaşamazsınız ve kayıplı bir formatın her kesimi, 92'lik bir sabit kalite ile yeniden kodlanır. Bir GIF, tek çerçeveli bir PNG olarak geri döner. Byte bütçesine ulaşmak için, boyutlandırıcının yüzde ön ayarları size daha doğrudan bir kontrol sağlar.
Bunların hiçbiri fotoğrafımı yükler mi?
Hayır. Bu uygulamanın API yolları yoktur ve sunucu işlemleri yoktur, ve yaptığı tek ağ istekleri kendi varlıkları ve WASM kodekleri için aynı kökenli fetchlerdir. Dosyanız bir tuvale kodlanır ve aynı sekmede WASM tarafından tekrar kodlanır. Bu kategorideki diğer çoğu araç, tam tersine çalışır: görüntünüz sunucularına gider ve bir süre tutma zamanlayıcısı çalışana kadar onların depolamasında bekler. Bu, gizlilik sayfamızda belirtilen farktır. Ayrıca, burada bir toplu işlem 10 dosya ve 50 MB ile sınırlıdır, çünkü kendi CPU'nuz işi yapmaktadır. O aynı sınır, 300 dosya içeren bir klasörün tarayıcı işi olmadığı için de geçerlidir.