Bugün JPEG dosyalarını kaydetmenin iki yolu olduğunu fark ettim: Temel JPEG (standart) ve Aşamalı JPEG (aşamalı). İki format aynı boyuta ve görüntü verilerine sahiptir ve uzantıları da aynıdır.Tek fark, görüntüleme şekilleridir.
Temel JPEG
Bu tür bir JPEG dosyası depolama yöntemi, yukarıdan aşağıya taramak ve her satırı JPEG dosyasına sırayla kaydetmektir. Bu dosyayı içeriğini görüntülemek için açarken, veriler, tüm veriler okunana ve resmin tamamı görüntülenene kadar, depolama sırasına göre yukarıdan aşağıya satır satır görüntülenecektir. Dosya büyükse veya ağ indirme hızı yavaşsa, resimlerin satır satır yüklendiği etkiyi göreceksiniz.Bu JPEG formatının hiçbir avantajı yoktur.Bu nedenle, genellikle Progressive JPEG önerilir.
Aşamalı JPEG
Baseline tek geçişli taramadan farklı olarak, Aşamalı JPEG dosyaları birden çok tarama içerir ve bu taramalar JPEG dosyasında sırayla saklanır. Dosyayı açma sürecinde ilk olarak tüm resmin bulanık anahatları görüntülenecektir Taramaların sayısı arttıkça resim daha net ve net hale gelir. Bu formatın ana avantajı, ağ yavaş olduğunda, görüntünün ne yüklendiğini bilmek için görüntünün ana hatlarını görebilmenizdir. Bazı web sitelerinde daha büyük resimler açarken bu tekniği fark edeceksiniz.
Aşamalı resimlerin avantajı, kullanıcıların resimleri indirmeden önce son görüntünün ana hatlarını görebilmesidir, bu da kullanıcı deneyimini bir dereceye kadar iyileştirebilir. (Şelale tarafından önerilen web sitesi hala standart tiptir)
Ek olarak, aşamalı resmin boyutu temel resim boyutundan çok farklı değildir ve bazen temel resimden daha küçük olabilir. Aşamalı resimlerin dezavantajı, kullanıcının CPU'sunu ve belleğini tüketmeleridir, ancak modern bilgisayarlar için bu resmin hesaplanması hiçbir şey değildir.
Bundan bahsettikten sonra, bunun yerine resimlerin nasıl Progressive JPEG'e kaydedileceği veya dönüştürüleceği hakkında konuşalım.
1. PhotoShop
Photoshop'ta "Web formatı olarak kaydet" vardır. Açtıktan sonra, aşamalı JPEG olmak için "Sürekli" yi seçin.
2. Linux
Aşamalı olup olmadığını kontrol edin jpeg: tanımla -verbose dosyaadı.jpg | grep Taramalı (Çıktı Yok ise, aşamalı jpeg değildir; Çıktı Düzlem ise, aşamalı jpeg'dir.)
Temel jpeg'i aşamalı jpeg'e dönüştürün: > infile.jpg dönüştürmek -interlace Plane outfile.jpg
3. PHP
İmageinterlace ve imagejpeg fonksiyonlarını kullanarak dönüştürme problemini kolayca çözebiliriz.
?
< ? php
$ im = imagecreatefromjpeg ('resim.jpg');
imageinterlace ($ im, 1);
imagejpeg ($ im, '. / php_interlaced.jpg', 100);
imagedestroy ($ im);
? >
4. Python
?
ithalat PIL
itibaren istisnalar ithalat IOError
img = PIL.Image.open ("c: \ users \ biaodianfu \ pictures \ in.jpg")
hedef = "c: \ users \ biaodianfu \ pictures \ test.jpeg"
Deneyin :
img.save (hedef, "JPEG", kalite = 80, optimize et = Doğru, ilerici = Doğru)
dışında IOError:
PIL.ImageFile.MAXBLOCK = img.size * img.size
img.save (hedef, "JPEG", kalite = 80, optimize et = Doğru, ilerici = Doğru)
5. jpegtran
jpegtran -copy yok -progresif < giriş dosyası > < çıktı dosyası >
6. C #
?
kullanma (Resim kaynağı = Image.FromFile (@ "D: \ temp \ test2.jpg")) {
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders (). İlk (c = > c.MimeType == "resim / jpeg");
EncoderParameters parametreleri = yeni Kodlayıcı Parametreleri (3);
parameters.Param = yeni EncoderParameter (System.Drawing.Imaging.Encoder.Quality, 100L);
parameters.Param = yeni EncoderParameter (System.Drawing.Imaging.Encoder.ScanMethod, ( int ) EncoderValue.ScanMethodInterlaced);
parameters.Param = yeni EncoderParameter (System.Drawing.Imaging.Encoder.RenderMethod, ( int ) EncoderValue.RenderProgressive);
source.Save (@ "D: \ temp \ kaydedilmiş.jpg", kodek, parametreler);
}