Bir JPEG görüntüsünün boyutunu kodu çözülmeden ve yeniden kodlanmadan değiştirebilir miyiz?


12

640x480 JPEG görüntüyü 320x240 boyutuna dönüştürmek istiyorum. JPEG görüntüsünü ham YCbCr'ye çözerek, ölçeklendirerek ve JPEG'e yeniden kodlayarak yapılabileceğini biliyorum. Ancak JPEG kodlaması ile görüntüyü kod çözme olmadan doğrudan ölçeklemek mümkün müdür?

Yanıtlar:


14

Ancak, JPEG görüntüleyiciniz SmartScale JPEG uzantısını destekliyorsa yapabilirsiniz . jpegtran , N = 1..16 ile N / 8 boyutları için bunu yapabilir. Temel olarak, DCT blok boyutu, yeniden sıkıştırma sırasında görüntüyü etkili bir şekilde ölçekleyen 8x8'den başka bir şeye değiştirilir (örn. 4x4).

Not: SmartScale, libjpeg kütüphanesinin 8. sürümünde tanıtıldı , ancak izleyiciler tarafından geniş çapta desteklenmiyor.

Ayrıntılı değişiklikleri açıklayan bir belge burada bulunabilir: JPEG'in evrimi .

EDIT: Görünüşe göre çoğu izleyici, libjpeg-turbo tabanlı olduğu için bu görüntüleri gerçekten gösteremez. Ve libjpeg-turbo bu özelliği uygulamayı seçmedi . Aslında, (Ubuntu 14.04 ve Windows 8'de) oldukça az sayıda program denedim ve hiçbiri jpegtrans kullanılarak oluşturulan küçültülmüş görüntüyü gösteremedi. Photoshop, IrfanView ve GIMP bile başarısız oldu.

DÜZENLEME 2: Aslında, Ubuntu ve Fedora libjpeg8 kütüphanesini bile göndermez, ancak tamamen libjpeg-turbo sürümü ile değiştirir. Böylece, hiçbir program JPEG SmartScale dosyalarını okuyamayacak, orijinal libjpeg8 kütüphanesine statik olarak bağlı birkaç ikili dosyaya kaydedemeyecektir.


Sadece görüntüye daha fazla veri ekleyerek büyüyen görüntüyü oluşturan bir kodek var mı?
Necktwi

ilerici jpeg ne olacak? Sorduğum şeyi tam olarak yapmıyor mu?
Necktwi

Hayır, bu görüntünün kalitesini (düşükten tama) artırarak biraz farklı bir şey yapar, ancak çözünürlük her zaman değişmez ( referans ). Ancak, farklı çözünürlükleri kodlayan "hiyerarşik mod" adında başka bir JPEG uzantısı vardır ( ayrıca buraya bakın ). Ama yine, libjpeg-turbo bunu desteklemiyor ( buraya bakın , metinde "ilerici" ifadesini arayın).
jmiserez

1
Ve ilk yorumu cevaplamak için, elbette böyle codec'ler var. Sadece JPG değil. Aradığınız şeye görüntü piramidi veya çok ölçekli gösterim denir. JPEG2000, dalgacık piramidi oluşturan dalgacık dönüşümü kullanır. Gauss veya Laplacian piramitleri gibi başka piramitler de vardır. Bu slayt seti , işlerin nasıl çalıştığı hakkında iyi bir genel bakış sunarken, JPEG2000 burada ve burada tartışılmaktadır .
jmiserez

Yeni JPEG formatları hakkında bilgi için teşekkürler. Henüz birçok kaynak görüntünün (kamera, tarayıcı vb.) Kullanılmasını beklemiyorum.
AFH

3

Kısa cevap hayır. Bir JPEG görüntüsü sıkıştırma kullanır, yani her bir çıkış baytı diğerlerine bağlıdır. Görüntü bayt sayısını değiştirirseniz, sıkıştırmasını açmanız ve yeniden sıkıştırmanız gerekir.

Yeniden sıkıştırma sonucunda kalite kaybı olacaktır, çünkü JPEG kayıplı sıkıştırma kullanır, ancak çözünürlüğü dörde katlayarak yine de kaliteyi kaybedersiniz. Yeniden sıkıştırırken JPEG kalite seviyesini artırarak düşük çözünürlüklü görüntüden mümkün olan en iyi kaliteyi elde edebilirsiniz, ancak bu elbette dosya boyutunu artıracaktır.

Görüntülerle çok fazla iş yaparsanız, PNG gibi kayıpsız bir sıkıştırma biçiminde çalışmak, elbette ekstra disk alanınız olması koşuluyla, yalnızca görüntüler sonlandırıldığında JPEG'e dönüştürmek en iyisidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.