Ano ang JPEG file?
Ang JPEG ay isang uri ng format ng imahe na nai-save gamit ang paraan ng lossy compression. Ang output na imahe, bilang resulta ng compression, ay isang trade-off sa pagitan ng laki ng storage at kalidad ng imahe. Maaaring ayusin ng mga user ang antas ng compression upang makamit ang nais na antas ng kalidad habang kasabay nito ay binabawasan ang laki ng imbakan. Hindi gaanong naaapektuhan ang kalidad ng larawan kung ilalapat ang 10:1 compression sa larawan. Kung mas mataas ang halaga ng compression, mas mataas ang pagkasira ng kalidad ng imahe.
Mga Detalye ng Format ng File
Ang format ng file ng imahe ng JPEG ay na-standardize ng Joint Photographic Experts Group at, samakatuwid, ang pangalang JPEG. Ang format ay ang pagpili ng pag-iimbak at pagpapadala ng mga photographic na larawan sa web. Halos lahat ng mga Operating system ay mayroon na ngayong mga manonood na sumusuporta sa visualization ng mga JPEG na larawan, na kadalasang nakaimbak na may JPG extension din. Kahit na ang mga web browser ay sumusuporta sa visualization ng mga JPEG na imahe. Bago pumunta sa mga detalye ng format ng JPEG file, kailangang banggitin ang kabuuang proseso ng mga hakbang sa paggawa ng JPEG.
Mga Hakbang sa Compression ng JPEG
Transformation: Ang mga color na imahe ay binago mula sa RGB tungo sa luminance/chrominance na imahe (Ang mata ay sensitibo sa luminance, hindi chrominance, kaya ang bahagi ng chrominance ay maaaring mawalan ng maraming data at sa gayon ay maaaring lubos na ma-compress.
Down Sampling: Ginagawa ang down sampling para sa colored component at hindi para sa luminance component . Ang down sampling ay ginagawa alinman sa ratio na 2:1 horizontally at 1:1 vertically (2h 1 V). Kaya ang imahe ay nababawasan sa laki dahil ang ‘y’ na bahagi ay hindi hinawakan, walang kapansin-pansing pagkawala ng kalidad ng imahe.
Pag-aayos sa Mga Pangkat: Ang mga pixel ng bawat bahagi ng kulay ay nakaayos sa mga pangkat ng 8×2 pixel na tinatawag na “ data units” kung ang bilang ng mga row o column ay hindi multiple ng 8, ang ibabang row at pinakakanang column ay duplicate.
Discrete Cosine Transformation: Pagkatapos ay inilalapat ang Discrete Cosine Transform ( DCT) sa bawat unit ng data upang gumawa ng 8×8 na mapa ng mga binagong bahagi. Ang DCT ay nagsasangkot ng ilang pagkawala ng impormasyon dahil sa limitadong katumpakan ng computer arithmetic. Nangangahulugan ito na kahit na wala ang mapa ay magkakaroon ng kaunting pagkawala ng kalidad ng imahe ngunit karaniwan itong maliit.
Quantization: Ang bawat isa sa 64 na binagong bahagi sa unit ng data ay hinati sa isang hiwalay na numero na tinatawag nitong ‘Quantization Coefficient (QC)’ at pagkatapos ay i-round sa isang integer. Ito ay kung saan ang impormasyon ay nawala nang hindi na mababawi, Malaking QC ay nagdudulot ng mas maraming pagkawala. Sa pangkalahatan, pinapayagan ng karamihan sa mga ipinapatupad ng JPEG ang paggamit ng mga talahanayan ng QC na inirerekomenda ng pamantayan ng JPEG.
Encoding: Ang 64 quantized transformed coefficients ( Na ngayon ay integers) ng bawat unit ng data ay naka-encode gamit ang kumbinasyon ng RLE at Huffman coding.
Pagdaragdag ng Header: Ang huling hakbang ay nagdaragdag ng header at lahat ng JPEG parameter na ginamit at naglalabas ng resulta.
Ginagamit ng JPEG decoder ang mga hakbang sa kabaligtaran upang makabuo ng orihinal na larawan mula sa naka-compress.
Istraktura ng File
Ang isang JPEG na imahe ay kinakatawan bilang isang sequence ng mga segment kung saan ang bawat segment ay nagsisimula sa isang marker. Ang bawat marker ay nagsisimula sa 0xFF byte na sinusundan ng marker flag upang kumatawan sa uri ng marker. Ang payload na sinusundan ng marker ay iba ayon sa uri ng marker. Ang mga karaniwang uri ng JPEG marker ay nakalista sa ibaba:
Short Name | Bytes | Payload | Name | Comments |
---|---|---|---|---|
SOI | 0xFF, 0xD8 | none | Start of Image | |
S0F0 | 0xFF, 0xC0 | variable size | Start of Frame | |
S0F2 | 0xFF, 0xC2 | variable size | Start fo Frame | |
DHT | 0xFF, 0xC4 | variable size | Define Huffman Tables | |
DQT | 0xFF, 0xDB | variable size | Define Quantization Table(s) | |
DRI | 0xFF, 0xDD | 4 bytes | Define Restart Interval | |
SOS | 0xFF, 0xDA | variable size | Start Of Scan | |
RSTn | 0xFF, 0xD//n//(//n//#0..7) | none | Restart | |
APPn | 0xFF, 0xE//n// | variable size | Application specific | |
COM | 0xFF, 0xFE | variable size | Comment | |
EOI | 0xFF, 0xD9 | none | End Of Image |
Sa loob ng entropy-coded na data, pagkatapos ng anumang 0xFF byte, isang 0x00 byte ang ipinapasok ng encoder bago ang susunod na byte, nang sa gayon ay walang lumilitaw na marker kung saan wala ang nakalaan, na pumipigil sa mga error sa pag-frame. Dapat laktawan ng mga decoder ang 0x00 byte na ito. Ang diskarteng ito, na tinatawag na byte stuffing (tingnan ang seksyon ng detalye ng JPEG F.1.2.3), ay inilalapat lamang sa data na naka-entropy na naka-code, hindi sa marker na data ng payload . Gayunpaman, tandaan na ang entropy-coded na data ay may ilang sariling mga marker; partikular ang mga Reset marker (0xD0 hanggang 0xD7), na ginagamit upang ihiwalay ang mga independiyenteng chunks ng entropy-coded na data upang payagan ang parallel decoding, at ang mga encoder ay libre na ipasok ang mga Reset marker na ito sa mga regular na pagitan (bagaman hindi lahat ng encoder ay gumagawa nito).