Pehea e hana ai ka palapala JPEG

Loaʻa nā kiʻi JPEG i ko mākou ola kikohoʻe, akā ma hope o kēia veneer o ka ʻike he algorithms e wehe i nā kikoʻī i ʻike ʻole ʻia e ka maka kanaka. ʻO ka hopena ka ʻike kiʻekiʻe loa i ka liʻiliʻi o ka faila - akā pehea ka hana a pau? E ʻike kākou i ka mea i ʻike ʻole ʻia e ko kākou mau maka!

Pehea e hana ai ka palapala JPEG

He mea maʻalahi ka lawe ʻana i ka hiki ke hoʻouna i kahi kiʻi i kahi hoaaloha a ʻaʻole hopohopo e pili ana i ka mea hana, polokalamu kele pūnaewele a i ʻole ka ʻōnaehana hana a lākou e hoʻohana nei - akā ʻaʻole pēlā ka hihia. Ma ka 1980 mua, hiki i nā kamepiula ke mālama a hōʻike i nā kiʻi kikohoʻe, akā nui nā manaʻo hoʻokūkū e pili ana i ke ala maikaʻi loa e hana ai i kēia. ʻAʻole hiki iā ʻoe ke hoʻouna wale i kahi kiʻi mai kekahi kamepiula i kekahi a manaʻolana e hana.

No ka hoʻoponopono ʻana i kēia pilikia, ua hōʻuluʻulu ʻia kahi komite o nā loea mai nā wahi a puni o ka honua i ka makahiki 1986 i kapa ʻia ʻo "Hui Hui o na Poe Kii» (Joint Photographic Experts Group, JPEG), i hoʻokumu ʻia ma ke ʻano he hana hui ma waena o ka International Organization for Standardization (ISO) a me ka International Electrotechnical Commission (IEC), ʻelua mau hui kūlana honua i hoʻokumu ʻia ma Geneva, Switzerland.

Ua hana kekahi pūʻulu o ka poʻe i kapa ʻia ʻo JPEG i ka maʻamau hoʻoemi kiʻi kiʻi JPEG ma 1992. Ua ʻike paha ka mea i hoʻohana i ka Pūnaewele i nā kiʻi i hoʻopaʻa ʻia ʻo JPEG. ʻO kēia ke ala maʻamau e hoʻopili, hoʻouna a mālama i nā kiʻi. Mai nā ʻaoʻao pūnaewele a i ka leka uila a hiki i ka pāpili kaiapili, hoʻohana ʻia ʻo JPEG i mau piliona manawa i ka lā—kokoke i kēlā me kēia manawa a mākou e nānā ai i kahi kiʻi ma ka pūnaewele a hoʻouna paha. Me ka ʻole o JPEG, ʻaʻole liʻiliʻi ka waihoʻoluʻu o ka pūnaewele, lohi, a liʻiliʻi paha nā kiʻi pōpoki!

ʻO kēia ʻatikala e pili ana i ka wehewehe ʻana i kahi kiʻi JPEG. I nā huaʻōlelo ʻē aʻe, he aha ka mea e pono ai e hoʻohuli i ka ʻikepili i hoʻopaʻa ʻia i mālama ʻia ma ke kamepiula i kahi kiʻi i ʻike ʻia ma ka pale. Pono kēia e ʻike, ʻaʻole wale no ka mea nui ka hoʻomaopopo ʻana i ka ʻenehana a mākou e hoʻohana ai i kēlā me kēia lā, akā ma ka wehe ʻana i nā pae hoʻopiʻi, aʻo hou mākou e pili ana i ka ʻike a me ka ʻike, a me nā kikoʻī e pili ana i ko mākou mau maka.

Eia kekahi, he mea hoihoi loa ka pāʻani ʻana me nā kiʻi ma kēia ʻano.

Pehea e hana ai ka palapala JPEG

Ke nānā nei i loko o JPEG

Ma ke kamepiula, mālama ʻia nā mea a pau ma ke ʻano he kaʻina o nā helu binary. ʻO ka maʻamau, ua hui pū ʻia kēia mau ʻāpana, nā zero a me nā mea i nā pūʻulu ʻewalu e hana i nā bytes. Ke wehe ʻoe i kahi kiʻi JPEG ma ke kamepiula, pono kekahi mea (kahi polokalamu kele pūnaewele, ʻōnaehana hana, kekahi mea ʻē aʻe) e hoʻokaʻawale i nā byte, e hoʻihoʻi i ke kiʻi kumu ma ke ʻano he papa inoa o nā kala e hiki ke hōʻike ʻia.

Inā ʻoe e hoʻoiho i kēia mea ʻono kiʻi o ka pōpoki a wehe ia i loko o kahi mea hoʻoponopono kikokikona, e ʻike ʻoe i kahi pūʻulu o nā huaʻōlelo incoherent.

Pehea e hana ai ka palapala JPEG
Ke hoʻohana nei au i ka Notepad++ e nānā i nā mea o ka faila, no ka mea, ʻo nā mea hoʻoponopono kikokikona maʻamau e like me Notepad ma Windows e hōʻino i ka faila binary ma hope o ka mālama ʻana a ʻaʻole ia e ʻoluʻolu i ka palapala JPEG.

ʻO ka wehe ʻana i kahi kiʻi i loko o kahi kaʻina hana huaʻōlelo e huikau i ke kamepiula, e like me ʻoe e huikau i kou lolo ke ʻimi ʻoe i kou mau maka a hoʻomaka e ʻike i nā kiko kala!

Ua ʻike ʻia kēia mau wahi āu e ʻike ai nā phosphene, ʻaʻole ia he hopena o ka hoʻoulu māmā ʻana a i ʻole ka hallucination i hana ʻia e ka noʻonoʻo. Hana ia ma muli o ka manaʻo o kou lolo e hōʻike ana nā hōʻailona uila i nā aʻalolo optic i ka ʻike e pili ana i ka mālamalama. Pono ka lolo e hana i kēia mau manaʻo no ka mea ʻaʻohe ala e ʻike ai inā he leo ka hōʻailona, ​​​​he hihiʻo, a he mea ʻē aʻe paha. ʻO nā aʻalolo a pau i loko o ke kino e hoʻoili i nā manaʻo uila like. Ma ke kaomi ʻana i kou mau maka, hoʻouna ʻoe i nā hōʻailona ʻike ʻole, akā hoʻāla i nā mea hoʻokipa o ka maka, i unuhi ʻia e kou lolo - i kēia hihia, hewa ʻole - he mea ʻike. Hiki iā ʻoe ke ʻike maoli i ke kaomi!

He mea ʻakaʻaka ke noʻonoʻo e pili ana i ke ʻano o nā lolouila like me ka lolo, akā he mea hoʻohālikelike maikaʻi nō hoʻi ia e hōʻike i ka nui o ke ʻano o ka ʻikepili-i lawe ʻia ma ke kino e nā aʻalolo a i mālama ʻia paha ma ke kamepiula-e pili ana i ke ʻano o ka unuhi ʻana. Hoʻokumu ʻia nā ʻikepili binary āpau me XNUMXs a me XNUMXs, nā ʻāpana kumu e hiki ke lawe i ka ʻike o kēlā me kēia ʻano. ʻIke pinepine kāu kamepiula i ka wehewehe ʻana iā lākou me ka hoʻohana ʻana i nā hōʻailona e like me nā hoʻonui faila. I kēia manawa, koi mākou iā ia e wehewehe iā lākou ma ke ʻano he kikokikona, no ka mea, ʻo ia ka mea e manaʻo ai ka mea hoʻoponopono kikokikona.

No ka hoʻomaopopo ʻana pehea e wehe ai i ka JPEG, pono mākou e ʻike i nā hōʻailona kumu iā lākou iho - ka ʻikepili binary. Hiki ke hana i kēia me ka hoʻoponopono hexadecimal, a i ʻole ma luna ʻaoʻao pūnaewele ʻatikala kumu! Aia kekahi kiʻi, ma ka ʻaoʻao o ke kahua kikokikona kona mau bytes (koe wale nō ke poʻo), hōʻike ʻia ma ke ʻano decimal. Hiki iā ʻoe ke hoʻololi iā lākou, a e hoʻopili hou ka palapala a hana i kahi kiʻi hou ma ka lele.

Pehea e hana ai ka palapala JPEG

Hiki iā ʻoe ke aʻo nui ma ka pāʻani ʻana me kēia hoʻoponopono. No ka laʻana, hiki iā ʻoe ke haʻi i ke ʻano o ka mālama ʻana i nā pika?

ʻO ka mea ʻē aʻe o kēia laʻana, ʻo ka hoʻololi ʻana i kekahi mau helu ʻaʻole pili i ke kiʻi, akā, no ka laʻana, inā e hoʻololi ʻoe i ka helu 17 me 0 ma ka laina mua, e pōʻino loa ke kiʻi!

Pehea e hana ai ka palapala JPEG

ʻO nā hoʻololi ʻē aʻe, e like me ka hoʻololi ʻana i ka 7 ma ka laina 1988 me ka helu 254, hoʻololi i ke kala, akā wale nō nā pika ma hope.

Pehea e hana ai ka palapala JPEG

ʻO ka mea ʻē aʻe paha, ʻo ka hoʻololi ʻana o kekahi mau helu i ke kala wale nō, akā ke ʻano o ke kiʻi. E hoʻololi i ka 70 ma ka laina 12 i ka 2 a nānā i ka lālani luna o ke kiʻi e ʻike i kaʻu ʻōlelo.

Pehea e hana ai ka palapala JPEG

A no ke ʻano o ke kiʻi JPEG āu e hoʻohana ai, e ʻike mau ʻoe i kēia mau hiʻohiʻona chess pohihihi i ka wā e hoʻoponopono ai i nā bytes.

I ka pāʻani ʻana me ka mea hoʻoponopono, paʻakikī ke hoʻomaopopo i ke ʻano o ka hana hou ʻana o ke kiʻi mai kēia mau byte, no ka mea, aia ka JPEG compression i ʻekolu mau ʻenehana like ʻole, i hoʻopili ʻia i nā pae. E aʻo kaʻawale mākou i kēlā me kēia e wehe i ke ʻano pohihihi a mākou e ʻike nei.

ʻEkolu pae o ka hoʻoemi JPEG:

  1. Hoʻopili kala.
  2. Hoʻololi cosine discrete a me ka laʻana.
  3. Hoʻopili ka lōʻihi holo, pākuʻi и Huffman

No ka hāʻawi ʻana iā ʻoe i ka manaʻo o ka nui o ka hoʻopaʻa ʻana, e hoʻomaopopo ʻo ke kiʻi ma luna he 79 mau helu, a i ʻole 819 KB. Inā mālama mākou iā ia me ka ʻole o ka hoʻopiʻi ʻana, pono kēlā me kēia pika i ʻekolu mau helu - no nā ʻāpana ʻulaʻula, ʻōmaʻomaʻo a me ka uliuli. He 79 kēia mau helu, a ma kahi paha. 917 KB. Ma muli o ka hoʻopili ʻana o JPEG, ua hōʻemi ʻia ka faila hope ma mua o 700 mau manawa!

ʻOiaʻiʻo, hiki ke hoʻopili ʻia kēia kiʻi. Aia ma lalo iho nā kiʻi ʻelua ma ka ʻaoʻao - ua hoʻopaʻa ʻia ke kiʻi ma ka ʻaoʻao ʻākau i 16 KB, ʻo ia hoʻi, 57 mau manawa ʻoi aku ka liʻiliʻi ma mua o ka mana i hoʻopaʻa ʻole ʻia!

Pehea e hana ai ka palapala JPEG

Inā ʻoe e nānā pono, e ʻike ʻoe ʻaʻole like kēia mau kiʻi. He mau kiʻi lāua ʻelua me ka paʻi JPEG, akā ʻoi aku ka liʻiliʻi o ka mea kūpono. He ʻino iki nō hoʻi ia (e nānā i nā ʻāpana kala hope). ʻO ia ke kumu i kapa ʻia ai ʻo JPEG ʻo lossy compression; I loko o ke kaʻina hana hoʻoemi, hoʻololi ke kiʻi a nalowale kekahi mau kikoʻī.

1. Ka waihoʻoluʻu kala

Eia kekahi kiʻi me ka pae mua o ka kaomi ʻana i hoʻohana ʻia.

Pehea e hana ai ka palapala JPEG
(Manaʻo pāʻani - in kumu ʻatikala). Hoʻopau ka wehe ʻana i hoʻokahi helu i nā kala āpau. Eia naʻe, inā wehe ʻia nā helu ʻeono, ʻaʻohe hopena o ke kiʻi.

I kēia manawa ua maʻalahi ka wehewehe ʻana i nā helu. He papa inoa maʻalahi kēia o nā kala, kahi e hoʻololi ai kēlā me kēia byte i hoʻokahi pika, akā i ka manawa like he hapalua ia o ka nui o ke kiʻi i hoʻopaʻa ʻole ʻia (e lawe ʻia ma kahi o 300 KB i kēia nui hoʻemi). Hiki iā ʻoe ke koho i ke kumu?

Hiki iā ʻoe ke ʻike ʻaʻole hōʻike kēia mau helu i nā ʻāpana ʻulaʻula, ʻōmaʻomaʻo, a me ka uliuli maʻamau, no ka mea, inā mākou e pani i nā helu āpau me nā zeros, e loaʻa iā mākou kahi kiʻi ʻōmaʻomaʻo (ma mua o ke keʻokeʻo).

Pehea e hana ai ka palapala JPEG

No ka mea, kū kēia mau bytes no Y (mālamalama),

Pehea e hana ai ka palapala JPEG

Cb (uliuli pili),

Pehea e hana ai ka palapala JPEG

a me nā kiʻi Cr (ʻulaʻula pili).

Pehea e hana ai ka palapala JPEG

No ke aha e hoʻohana ʻole ai i ka RGB? Ma hope o nā mea a pau, penei ka hana ʻana o ka hapa nui o nā pale hou. Hiki i kāu mea nānā ke hōʻike i kēlā me kēia kala, me ka ʻulaʻula, ka ʻōmaʻomaʻo a me ka uliuli, me nā ʻano ikaika like ʻole no kēlā me kēia pika. Loaʻa ke keʻokeʻo ma ka hoʻohuli ʻana i nā mea ʻekolu i ka mālamalama piha, a ʻeleʻele hoʻi ma ka hoʻohuli ʻana iā lākou.

Pehea e hana ai ka palapala JPEG

Ua like loa keia me ka hana a ka maka kanaka. Ua kapa ʻia nā ʻāpana kala i ko mākou mau maka "cones“, a ua māhele ʻia i ʻekolu ʻano, ʻoi aku ka maʻalahi o kēlā me kēia i nā kala ʻulaʻula, ʻōmaʻomaʻo, a uliuli paha [S-type cones i maʻalahi i ka violet-blue (S mai ka English Short - short-wave spectrum), M -type - ma ka ʻōmaʻomaʻo-melemele (M mai ka English Medium - medium-wave), a me ka L-type - ma ka melemele-ʻulaʻula (L mai ka English Long - long-wave) mau ʻāpana o ka spectrum. ʻO ka loaʻa ʻana o kēia mau ʻano cones ʻekolu (a me nā koʻokoʻo, i maʻalahi i ka ʻāpana ʻōmaʻomaʻo emerald o ka spectrum) hāʻawi i ke kanaka i ka ʻike kala. / ma kahi o. unuhi.]. Nā lāʻau lāʻau, ʻO kekahi ʻano photoreceptor i ko mākou mau maka, hiki ke ʻike i nā loli i ka ʻōlinolino, akā ʻoi aku ka maʻalahi o ke kala. Aia ko mākou mau maka ma kahi o 120 miliona mau koʻokoʻo a he 6 miliona mau cones wale nō.

ʻO ia ke kumu i ʻoi aku ka maikaʻi o ko mākou mau maka i ka ʻike ʻana i nā loli o ka mālamalama ma mua o ka hoʻololi ʻana i ke kala. Inā hoʻokaʻawale ʻoe i ke kala mai ka ʻōlinolino, hiki iā ʻoe ke wehe i kahi waihoʻoluʻu liʻiliʻi a ʻaʻohe mea e ʻike i kekahi mea. ʻO Chroma subsampling ke kaʻina hana e hōʻike ana i nā ʻāpana kala o ke kiʻi ma kahi hoʻonā haʻahaʻa ma mua o nā ʻāpana luminance. Ma ka laʻana ma luna, hoʻokahi kikoʻī Y ko kēlā me kēia pika, a ʻo kēlā me kēia hui pākahi o ʻehā pika he hoʻokahi Cb a me hoʻokahi Cr. No laila, ʻehā manawa ʻoi aku ka liʻiliʻi o ka ʻike kala ma mua o ke kiʻi kumu.

Hoʻohana ʻia ka lumi kala YCbCr ma JPEG wale nō. Ua hana mua ʻia i ka makahiki 1938 no nā polokalamu kīwī. ʻAʻole i loaʻa i kēlā me kēia kanaka ka TV kala, no laila, ʻo ka hoʻokaʻawale ʻana i ka waihoʻoluʻu a me ka ʻālohilohi i hiki i kēlā me kēia ke loaʻa ka hōʻailona like, a ʻo nā TV me ka kala ʻole i hoʻohana wale i ka ʻāpana kukui.

No laila, ʻo ka wehe ʻana i hoʻokahi helu mai ka mea hoʻoponopono e hoʻopau loa i nā kala āpau. Mālama ʻia nā ʻāpana ma ke ʻano YYYY Cb Cr (ʻoiaʻiʻo, ʻaʻole pono i kēlā kauoha - ua kuhikuhi ʻia ke kauoha mālama i ke poʻo waihona). ʻO ka wehe ʻana i ka helu mua e ʻike ʻia ka waiwai mua o Cb e like me Y, Cr me Cb, a ma ke ʻano maʻamau e loaʻa iā ʻoe kahi hopena domino e hoʻololi i nā kala āpau o ke kiʻi.

ʻAʻole koi ka ʻōlelo kikoʻī JPEG iā ʻoe e hoʻohana iā YCbCr. Akā hoʻohana ka hapa nui o nā faila no ka mea e hoʻopuka ana i nā kiʻi i hoʻohaʻahaʻa ʻia ma mua o RGB. Akā ʻaʻole pono ʻoe e lawe i kaʻu ʻōlelo no ia mea. E ʻike iā ʻoe iho ma ka pākaukau ma lalo i ke ʻano o ka subsampling o kēlā me kēia ʻāpana ma RGB a me YCbCr.

Pehea e hana ai ka palapala JPEG
(Manaʻo pāʻani - in kumu ʻatikala).

ʻAʻole ʻike ʻia ka wehe ʻana o ka uliuli e like me ka ʻulaʻula a i ʻole ka ʻōmaʻomaʻo. ʻO ia ma muli o ʻeono miliona cones i kou mau maka, ma kahi o 64% ka maʻalahi i ka ʻulaʻula, 32% i ka ʻōmaʻomaʻo a me 2% i ka uliuli.

ʻIke maikaʻi ʻia ka hoʻohaʻahaʻa ʻana o ka mea Y ​​(hema hema). ʻIke ʻia kahi hoʻololi liʻiliʻi.

ʻO ka hoʻololi ʻana i kahi kiʻi mai RGB a i YCbCr ʻaʻole ia e hōʻemi i ka nui o ka faila, akā maʻalahi ia e ʻimi i nā kikoʻī liʻiliʻi i ʻike ʻia e hiki ke wehe ʻia. Loaʻa ka hoʻoemi poho ma ka pae ʻelua. Hoʻokumu ʻia ia ma ka manaʻo o ka hōʻike ʻana i ka ʻikepili i kahi ʻano compressible.

2. Hoʻololi cosine discrete a me ka laʻana

ʻO kēia pae o ka hoʻopaʻa ʻana, no ka hapa nui, he aha ka JPEG. Ma hope o ka hoʻololi ʻana i nā waihoʻoluʻu iā YCbCr, hoʻopili ʻia nā ʻāpana i kēlā me kēia, no laila hiki iā mākou ke noʻonoʻo i ka ʻāpana Y wale nō.

Pehea e hana ai ka palapala JPEG
(Manaʻo pāʻani - in kumu ʻatikala). Ma ka pānaʻi pāʻani, ke kaomi ʻana i kahi pixel e ʻōwili i ka mea hoʻoponopono i ka laina e hōʻike ana iā ia. E ho'āʻo e wehe i nā helu mai ka hopena a i ʻole e hoʻohui i kekahi mau zeros i kekahi helu.

I ka nānā mua ʻana, ua like ia me ka hoʻoemi ʻino loa. Aia he 100 pika ma ke kiʻi, a he 000 mau helu e hōʻike i ko lākou ʻōlinolino (Y-hui)—ʻoi aku ka ʻino ma mua o ka hoʻoomi ʻana i kekahi mea!

Eia naʻe, e hoʻomaopopo ʻo ka hapa nui o kēia mau helu he zero. Eia kekahi, hiki ke wehe ʻia kēlā mau zeros ma ka hope o nā laina me ka hoʻololi ʻole i ke kiʻi. Aia ma kahi o 26 mau helu i koe, a ʻaneʻane 000 manawa emi kēia!

Aia i kēia pae ka mea huna o nā ʻano chess. ʻAʻole like me nā hopena ʻē aʻe a mākou i ʻike ai, ʻaʻole he glitch ke ʻano o kēia mau hiʻohiʻona. ʻO lākou nā mea kūkulu hale o ke kiʻi holoʻokoʻa. Loaʻa i kēlā me kēia laina o ka mea hoʻoponopono nā helu he 64, discrete cosine transform (DCT) coefficients e pili ana i ka ikaika o 64 mau hiʻohiʻona kūʻokoʻa.

Hoʻokumu ʻia kēia mau hiʻohiʻona ma muli o ka ʻāpana cosine. Eia ke ʻano o kekahi o lākou:

Pehea e hana ai ka palapala JPEG
8 mai loko o 64 mau ʻokoʻa

Aia ma lalo kahi kiʻi e hōʻike ana i nā ʻano 64 āpau.

Pehea e hana ai ka palapala JPEG
(Manaʻo pāʻani - in kumu ʻatikala).

He mea koʻikoʻi kēia mau hiʻohiʻona no ka mea ʻo ia ke kumu o nā kiʻi 8x8. Inā ʻaʻole ʻoe kamaʻāina i ka algebra linear, ʻo ia hoʻi, hiki ke hana ʻia kekahi kiʻi 8x8 mai kēia mau hiʻohiʻona 64. ʻO DCT ke kaʻina o ka māhele ʻana i nā kiʻi i nā poloka 8x8 a me ka hoʻololi ʻana i kēlā me kēia poloka i hui pū ʻia o kēia 64 coefficients.

Me he mea kilokilo lā hiki ke haku ʻia kekahi kiʻi me 64 mau hiʻohiʻona kikoʻī. Eia naʻe, ua like kēia me ka ʻōlelo ʻana e hiki ke wehewehe ʻia kekahi wahi ma ka Honua e nā helu ʻelua - latitu a me longitude [e hōʻike ana i nā hemispheres / approx. unuhi.]. Manaʻo pinepine mākou i ka ʻili o ka Honua ma ke ʻano he ʻelua ʻāpana, no laila ʻelua wale nō helu. He 8 ka nui o ke kiʻi 8x64, no laila pono mākou i nā helu 64.

ʻAʻole maopopo i ke ʻano o ke kōkua ʻana iā mākou ma ke ʻano o ka hoʻopili. Inā makemake mākou i nā helu 64 e hōʻike i ke kiʻi 8x8, no ke aha e ʻoi aku ka maikaʻi o kēia ma mua o ka mālama ʻana i 64 mau mea ʻālohilohi? Hana mākou i kēia no ke kumu like a mākou i hoʻohuli ai i ʻekolu mau helu RGB i ʻekolu mau helu YCbCr: hiki iā mākou ke wehe i nā kikoʻī maʻalahi.

He paʻakikī ke ʻike pono i nā kikoʻī i wehe ʻia i kēia pae no ka mea pili ʻo JPEG i ka DCT i nā poloka 8x8. Eia naʻe, ʻaʻohe mea e pāpā iā mākou e hoʻopili iā ia i ke kiʻi holoʻokoʻa. Eia ke ʻano o DCT no ka mea Y ​​i hoʻopili ʻia i ke kiʻi holoʻokoʻa:

Pehea e hana ai ka palapala JPEG

Hiki ke hoʻoneʻe ʻia ma mua o 60 mau helu mai ka hopena me ka ʻike ʻole ʻia o nā loli i ke kiʻi.

Pehea e hana ai ka palapala JPEG

Eia naʻe, e hoʻomanaʻo inā hoʻopau mākou i nā helu ʻelima mua, e ʻike ʻia ka ʻokoʻa.

Pehea e hana ai ka palapala JPEG

ʻO nā helu ma ka hoʻomaka e hōʻike ana i nā loli haʻahaʻa haʻahaʻa i ke kiʻi, kahi e kiʻi maikaʻi ai ko mākou mau maka. Hōʻike nā helu i ka hopena i nā loli i nā alapine kiʻekiʻe i paʻakikī ke ʻike. No ka "ʻike i ka mea hiki ʻole ke ʻike ʻia e ka maka," hiki iā mākou ke hoʻokaʻawale i kēia mau kikoʻī alapine kiʻekiʻe ma ka ʻole ʻana i nā helu 5000 mua.

Pehea e hana ai ka palapala JPEG

ʻIke mākou i nā wahi āpau o ke kiʻi kahi i loaʻa ai ka hoʻololi nui loa mai ka pixel a i ka pixel. ʻO nā maka o ka pōpoki, kona ʻumiʻumi, ka ʻaʻahu terry a me nā aka ma ka ʻaoʻao hema hema ke kū i waho. Hiki iā ʻoe ke hele i mua ma ka hoʻopau ʻana i nā helu 10 mua:

Pehea e hana ai ka palapala JPEG

20:

Pehea e hana ai ka palapala JPEG

40:

Pehea e hana ai ka palapala JPEG

60:

Pehea e hana ai ka palapala JPEG

Hoʻopau ʻia kēia mau kikoʻī kiʻekiʻe e JPEG i ka wā o ka hoʻoemi. ʻAʻohe poho i ka hoʻololi ʻana i nā kala i nā coefficient DCT. Loaʻa ka pohō ma ka pae hoʻohālike, kahi e wehe ʻia ai nā koina kiʻekiʻe a i ʻole kokoke-zero. Ke hoʻohaʻahaʻa ʻoe i ka maikaʻi mālama JPEG, hoʻonui ka papahana i ka paepae no ka helu o nā waiwai i lawe ʻia, e hōʻemi ana i ka nui o ka faila, akā e hoʻonui i ke kiʻi. ʻO ia ke kumu i like ai ke kiʻi ma ka ʻāpana mua, he 57 manawa ka liʻiliʻi. Ua hōʻike ʻia kēlā me kēia poloka 8x8 e ka liʻiliʻi loa o nā coefficient DCT i hoʻohālikelike ʻia i ka mana kiʻekiʻe.

Hiki iā ʻoe ke hana i kahi hopena ʻoluʻolu e like me ke kahe mālie ʻana o nā kiʻi. Hiki iā ʻoe ke hōʻike i kahi kiʻi pohihihi e lilo i mea kikoʻī a ʻoi aku ka nui o nā coefficient i hoʻoiho ʻia.

Eia, no ka leʻaleʻa, ʻo ia kāu mea e loaʻa ai me ka hoʻohana ʻana i nā helu 24 wale nō:

Pehea e hana ai ka palapala JPEG

A i ʻole 5000 wale nō:

Pehea e hana ai ka palapala JPEG

Pohina loa, akā hiki ke ʻike ʻia!

3. Holo ka lōʻihi hoʻopili, delta a me Huffman

I kēia manawa, ua nalowale nā ​​pae a pau o ka hoʻoemi. ʻO ka pae hope, ma kahi ʻē aʻe, hele me ka ʻole o nā poho. ʻAʻole ia e holoi i ka ʻike, akā hoʻemi nui ia i ka nui o ka faila.

Pehea e hiki ai iā ʻoe ke hoʻopaʻa i kekahi mea me ka hoʻolei ʻole ʻana i ka ʻike? E noʻonoʻo pehea mākou e wehewehe ai i kahi ʻāpana ʻeleʻele maʻalahi 700 x 437.

Hoʻohana ʻo JPEG i nā helu 5000 no kēia, akā hiki ke loaʻa nā hopena maikaʻi aʻe. Hiki iā ʻoe ke noʻonoʻo i kahi hoʻolālā hoʻopili e wehewehe i kēlā kiʻi i loko o nā bytes liʻiliʻi?

ʻEhā ka hoʻolālā liʻiliʻi hiki iaʻu ke loaʻa: ʻekolu e hōʻike i kahi kala, a ʻo ka hā e hōʻike i ka nui o nā pika o kēlā kala. ʻO ka manaʻo o ka hōʻike ʻana i nā waiwai hou i kēia ala condensed i kapa ʻia ʻo run-longth encoding. He poho ʻole no ka mea hiki iā mākou ke hoʻihoʻi i ka ʻikepili i hoʻopaʻa ʻia i kona ʻano kumu.

ʻOi aku ka nui o ka faila JPEG me kahi ʻāpana ʻeleʻele ma mua o 4 bytes - e hoʻomanaʻo i ka pae DCT, hoʻohana ʻia ka hoʻoemi i nā poloka 8x8 pixel. No laila, ma ka liʻiliʻi, pono mākou i hoʻokahi helu DCT no kēlā me kēia 64 pixels. Pono mākou i hoʻokahi no ka mea ma kahi o ka mālama ʻana i hoʻokahi coefficient DCT a ukali ʻia e 63 zeros, run long encoding hiki iā mākou ke mālama i hoʻokahi helu a hōʻike i "nā mea ʻē aʻe a pau he zeros."

ʻO ka hoʻopili ʻana ʻo Delta kahi ʻenehana i loaʻa i kēlā me kēia byte kahi ʻokoʻa mai kekahi waiwai, ma mua o ka waiwai piha. No laila, hoʻololi ka hoʻoponopono ʻana i kekahi mau byte i ke kala o nā pika ʻē aʻe. No ka laʻana, ma kahi o ka mālama ʻana

12 13 14 14 14 13 13 14

Hiki iā mākou ke hoʻomaka me ka 12 a laila hōʻike wale i ka nui o kā mākou pono e hoʻohui a unuhi paha no ka loaʻa ʻana o ka helu aʻe. A ʻo kēia kaʻina i ka delta coding e lawe i ke ʻano:

12 1 1 0 0 -1 0 1

ʻAʻole ʻoi aku ka liʻiliʻi o ka ʻikepili i hoʻololi ʻia ma mua o ka ʻikepili kumu, akā ʻoi aku ka maʻalahi o ke kaomi ʻana. Hiki ke kōkua i ka ho'opili 'ana i ka delta ma mua o ka holo 'ana i ka ho'opā'ālua 'ana me ka pau 'ole.

ʻO ka Delta coding kekahi o nā ʻenehana liʻiliʻi i hoʻohana ʻia ma waho o nā poloka 8x8. No ka 64 DCT coefficients, hoʻokahi wale nō ka hana nalu mau (paʻa kala). Hōʻike ia i ka awelika olinolino o kēlā me kēia poloka no nā mea luma, a i ʻole ka ʻulaʻula maʻamau no nā mea Cb, a pēlā aku. ʻO ka waiwai mua o kēlā me kēia poloka DCT i kapa ʻia ʻo ka waiwai DC, a ʻo kēlā me kēia waiwai DC i hoʻopili ʻia me ka delta e pili ana i nā mea ma mua. No laila, ʻo ka hoʻololi ʻana i ka ʻōlinolino o ka poloka mua e pili ana i nā poloka a pau.

Ke waiho nei ka mea pohihihi hope loa: pehea ka hoʻololi ʻana i ka mea hoʻokahi e hōʻino loa i ke kiʻi holoʻokoʻa? A hiki i kēia manawa, ʻaʻole i loaʻa i nā pae kōmike nā waiwai like. Aia ka pane ma ke poʻomanaʻo JPEG. Aia nā 500 paita mua i nā metadata e pili ana i ke kiʻi - laula, kiʻekiʻe, a pēlā aku, a ʻaʻole mākou i hana pū me lākou.

Me ka ʻole o ke poʻomanaʻo, ʻaneʻane hiki ʻole (a paʻakikī paha) ke hoʻololi i ka JPEG. Me he mea lā ke hoʻāʻo nei au e wehewehe i ke kiʻi iā ʻoe, a ke hoʻomaka nei au e haku i nā huaʻōlelo i mea e hōʻike ai i koʻu manaʻo. E ʻoluʻolu paha ka wehewehe ʻana, no ka mea hiki iaʻu ke hana i nā huaʻōlelo me ke ʻano maoli aʻu e makemake ai e haʻi aku, akā no nā poʻe ʻē aʻe ʻaʻole lākou e noʻonoʻo.

He naʻaupō ia, akā ʻo ia ka mea i hana ʻia. Hoʻopili ʻia kēlā me kēia kiʻi JPEG me nā code kikoʻī iā ia. Mālama ʻia ka puke wehewehe ʻōlelo code ma ke poʻo. Kapa ʻia kēia ʻenehana i ka code Huffman a ʻo ka huaʻōlelo i kapa ʻia ʻo Huffman table. Ma ke poʻo, ua kaha ʻia ka papa ʻaina me ʻelua bytes - 255 a laila 196. Hiki i kēlā me kēia ʻāpana kala ke loaʻa i kāna papa ponoʻī.

ʻO nā hoʻololi i nā papa e hoʻopilikia loa i kekahi kiʻi. ʻO kahi laʻana maikaʻi e hoʻololi i ka laina 15 i 1.

Pehea e hana ai ka palapala JPEG

Hana ʻia kēia ma muli o ka wehewehe ʻana o nā papa i ke ʻano e heluhelu ʻia ai nā bits. I kēia manawa ua hana wale mākou me nā helu binary ma ke ʻano decimal. Akā, hūnā kēia iā mākou i ka ʻoiaʻiʻo inā makemake ʻoe e mālama i ka helu 1 i loko o kahi byte, e like ia me 00000001, ʻoiai ʻo kēlā me kēia byte pono e loaʻa i ʻewalu mau bits, ʻoiai inā hoʻokahi wale nō o lākou e pono ai.

He ʻino nui paha kēia o ka hakahaka inā he nui kāu helu liʻiliʻi. ʻO Huffman code kahi hana e hiki ai iā mākou ke hoʻomaha i kēia koi e pono i kēlā me kēia helu ke noho i ʻewalu mau bits. ʻO ia ke ʻano inā ʻike ʻoe i ʻelua bytes:

234 115

A laila, ma muli o ka papa Huffman, ʻekolu mau helu kēia. No ka unuhi ʻana iā lākou, pono ʻoe e hoʻokaʻawale iā lākou i nā ʻāpana pākahi:

11101010 01110011

A laila nānā mākou i ka papaʻaina e noʻonoʻo pehea e hui pū ai iā lākou. No ka laʻana, ʻo kēia paha nā ʻāpana ʻeono mua, (111010), a i ʻole 58 i ka decimal, a ukali ʻia e nā ʻāpana ʻelima (10011), a i ʻole 19, a ʻo ka hope ʻehā mau bits (0011), a i ʻole 3.

No laila, paʻakikī loa ka hoʻomaopopo ʻana i nā bytes i kēia pae o ka hoʻoemi. ʻAʻole hōʻike nā Bytes i ko lākou ʻano. ʻAʻole wau e hele i nā kikoʻī o ka hana ʻana me ka papa ma kēia ʻatikala, akā mea waiwai ma kēia pilikia ma ka pūnaewele Ua lawa.

ʻO kahi hoʻopunipuni hoihoi hiki iā ʻoe ke hana me kēia ʻike, ʻo ia ke hoʻokaʻawale i ke poʻo mai ka JPEG a mālama iā ia ma kahi kaʻawale. ʻO ka ʻoiaʻiʻo, ʻike ʻia ʻo ʻoe wale nō ke heluhelu i ka faila. Hana ʻo Facebook i kēia i mea e liʻiliʻi ai nā faila.

ʻO ka mea ʻē aʻe e hiki ke hoʻololi iki i ka papaʻaina Huffman. No nā mea ʻē aʻe e like ia me ke kiʻi haki. A ʻo ʻoe wale nō e ʻike i ke ala kupua e hoʻoponopono ai.

E hōʻuluʻulu mākou: no laila he aha ka mea e pono ai e decode JPEG? Pono:

  1. Wehe i ka (mau) papa Huffman mai ke poʻo a hoʻokaʻawale i nā ʻāpana.
  2. Wehe i nā coefficient hoʻololi cosine discrete no kēlā me kēia waihoʻoluʻu a me ka ʻāpana luminance no kēlā me kēia poloka 8x8, e hana ana i ka hoʻololi hoʻololi ʻana i ka lōʻihi holo a me ka delta.
  3. Hoʻohui i nā cosine e pili ana i nā coefficients e loaʻa ai nā waiwai pixel no kēlā me kēia poloka 8x8.
  4. E hoʻonui i nā ʻāpana kala inā hana ʻia ka subsampling (aia kēia ʻike ma ke poʻo).
  5. E hoʻohuli i nā koina YCbCr no kēlā me kēia pika i RGB.
  6. Hōʻike i ke kiʻi ma ka pale!

Hana koʻikoʻi no ka nānā wale ʻana i ke kiʻi me ka pōpoki! Eia naʻe, ʻo kaʻu makemake e hōʻike ana i ke ʻano o ka ʻenehana JPEG kanaka-centric. Hoʻokumu ʻia ia ma nā ʻano ʻokoʻa o kā mākou ʻike, e ʻae iā mākou e hoʻokō ʻoi aku ka maikaʻi ʻoi aku ka maikaʻi ma mua o nā ʻenehana maʻamau. A i kēia manawa ke hoʻomaopopo nei mākou i ka hana ʻana o JPEG, hiki iā mākou ke noʻonoʻo pehea e hiki ai ke hoʻololi ʻia kēia mau ʻenehana i nā wahi ʻē aʻe. No ka laʻana, hiki i ka delta encoding i ke wikiō ke hāʻawi i kahi hōʻemi nui o ka nui o ka faila, no ka mea, aia pinepine nā wahi holoʻokoʻa ʻaʻole i loli mai kahi kiʻi i kahi kiʻi (e laʻa, ke kāʻei kua).

Hoʻohana ʻia ke code ma ka ʻatikala, wehe ʻia, a loaʻa nā ʻōlelo aʻo e pili ana i ka hoʻololi ʻana i nā kiʻi me kāu ponoʻī.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka