E pili ana i kahi ʻano ʻokoʻa no ka mālama ʻana i kahi ākea paʻa

Makemake kekahi mea hoʻohana e kākau i kahi ʻāpana ʻikepili hou i ka paʻa paʻa, akā ʻaʻole lawa kāna wahi kaʻawale e hana ai i kēia. ʻAʻole wau makemake e holoi i kekahi mea, no ka mea "he mea nui a pono nā mea āpau." A he aha kā mākou e hana ai me ia?

ʻAʻohe kanaka i kēia pilikia. Aia nā terabytes o ka ʻike ma kā mākou paʻa paʻa, a ʻaʻole e emi kēia nui. Akā, pehea ke kū hoʻokahi? I ka hopena, ʻo nā faila a pau he mau ʻāpana o kekahi lōʻihi a, ʻoi aku paha, ʻaʻole ʻokoʻa ka mea hou mai ka mea i mālama ʻia.

ʻIke ʻia ʻo ka ʻimi ʻana i nā ʻāpana o ka ʻike i mālama ʻia ma kahi kīkī paʻakikī, inā ʻaʻole he hāʻule, a laila ʻaʻole ia he hana kūpono. Ma ka ʻaoʻao ʻē aʻe, inā liʻiliʻi ka ʻokoʻa, a laila hiki iā ʻoe ke hoʻoponopono liʻiliʻi ...

E pili ana i kahi ʻano ʻokoʻa no ka mālama ʻana i kahi ākea paʻa

TL; DR - ka lua o ka ho'āʻo ʻana e kamaʻilio e pili ana i kahi ala ʻē aʻe o ka hoʻonui ʻana i ka ʻikepili me ka hoʻohana ʻana i nā faila JPEG, i kēia manawa ma kahi ʻano hoʻomaopopo.

E pili ana i nā ʻāpana a me ka ʻokoʻa

Inā ʻoe e lawe i ʻelua mau ʻāpana ʻikepili holoʻokoʻa, a laila ma ka awelika o ka hapalua o nā ʻāpana i loko o lākou e kūlike. ʻOiaʻiʻo, ma waena o nā hoʻonohonoho hiki no kēlā me kēia pālua ('00, 01, 10, 11′), ʻo ka hapalua like nā waiwai like, maʻalahi nā mea āpau ma aneʻi.

Akā ʻoiaʻiʻo, inā mākou e lawe i ʻelua faila a hoʻopili i kekahi i ka lua, a laila e nalowale kekahi o lākou. Inā mālama mākou i nā hoʻololi, e hana hou mākou hoʻopili delta, e ola maikaʻi ana me ka ʻole o mākou, ʻoiai ʻaʻole i hoʻohana pinepine ʻia no nā kumu like. Hiki iā mākou ke hoʻāʻo e hoʻokomo i kahi kaʻina liʻiliʻi i loko o kahi kaʻina nui, akā naʻe, pilikia mākou i ka nalowale ʻana i nā ʻāpana koʻikoʻi o ka ʻikepili inā mākou e hoʻohana me ka noʻonoʻo me nā mea āpau.

Ma waena o ke aha a me ka mea hiki ke hoʻopau ʻia ka ʻokoʻa? ʻAe, ʻo ia hoʻi, kahi faila hou i kākau ʻia e ka mea hoʻohana he kaʻina o nā bits, me ka hiki ʻole iā mākou ke hana i kekahi mea iā ia iho. A laila pono ʻoe e ʻimi i nā ʻāpana like ʻole ma ka hard drive e hiki ke hoʻololi iā lākou me ka ʻole o ka mālama ʻana i ka ʻokoʻa, i hiki iā ʻoe ke ola i ko lākou poho me ka ʻole o nā hopena koʻikoʻi. A he mea kūpono ke hoʻololi ʻaʻole wale i ka faila ma ka FS ponoʻī, akā kekahi mau ʻike liʻiliʻi i loko. Akā ʻo wai a pehea?

Nā ʻano hana kūpono

E hoʻopakele nā ​​faila i hoʻopaʻa ʻia. ʻO kēia mau jpegs a pau, mp3 a me nā mea ʻē aʻe, ʻoiai ʻo ka hoʻopiʻi nalowale ʻana, loaʻa i kahi pūpū o nā bits hiki ke hoʻololi palekana. Hiki ke hoʻohana i nā ʻenehana kiʻekiʻe e hoʻololi pono ʻole i kā lākou mau ʻāpana ma nā ʻano like ʻole o ka hoʻopā ʻana. E kali. ʻO nā ʻenehana kiʻekiʻe ... hiki ʻole ke hoʻololi ʻia ... hoʻokahi wahi i kekahi ... ua like ia steganography!

ʻOiaʻiʻo, ʻo ka hoʻokomo ʻana i kekahi ʻike i loko o kahi ʻē aʻe e hoʻomanaʻo nei i kāna mau ʻano like ʻole. Pīhoihoi nō hoʻi au i ka ʻike ʻole ʻia o nā loli i hana ʻia i nā manaʻo kanaka. Ma kahi huna o nā alahele: hiki mai kā mākou hana i ka mea hoʻohana e hoʻokomo i nā ʻike hou aʻe ma kāna hard drive; e pōʻino wale ia iā ia. E poina hou ana.

No laila, ʻoiai hiki iā mākou ke hoʻohana iā lākou, pono mākou e hana i kekahi mau hoʻololi. A laila e haʻi wau a hōʻike iā lākou me ka hoʻohana ʻana i ke ʻano o kekahi o nā ʻano hana a me kahi ʻano faila maʻamau.

E pili ana i nā ʻīlio hae

Inā ʻoe e ʻomi maoli iā ia, ʻo ia ka mea maʻalahi loa i ka honua. Ke kamaʻilio nei mākou e pili ana i nā faila JPEG. ʻAʻole wale ka nui o nā mea hana a me nā ʻano hana no ka hoʻokomo ʻana i ka ʻikepili i loko, akā ʻo ia ka palapala kiʻi kaulana loa ma kēia honua.

E pili ana i kahi ʻano ʻokoʻa no ka mālama ʻana i kahi ākea paʻa

Eia naʻe, i ʻole e komo i ka hoʻoulu ʻana i ka ʻīlio, pono ʻoe e kaupalena i kāu kahua hana i nā faila o kēia ʻano. ʻAʻohe mea makemake i nā ʻāpana monochrome i ʻike ʻia ma muli o ke kaomi nui ʻana, no laila pono ʻoe e kaupalena iā ʻoe iho i ka hana ʻana me kahi faila i hoʻopili ʻia, ka pale ʻana i ka hoʻopili hou ʻana. ʻOi aku ka kikoʻī, me nā coefficients integer, e waiho nei ma hope o nā hana i kuleana no ka nalowale ʻana o ka ʻikepili - DCT a me ka quantization, i hōʻike maikaʻi ʻia i ka hoʻopā ʻana (mahalo i ka wiki o ka Bauman National Library):
E pili ana i kahi ʻano ʻokoʻa no ka mālama ʻana i kahi ākea paʻa

Nui nā ala e hiki ai ke koho i nā faila jpeg. Loaʻa ka loiloi ʻole (jpegtran), aia ka loiloi "ʻaʻohe poho", e hāʻawi maoli i kahi mea ʻē aʻe, akā ʻaʻole mākou e mālama iā lākou. Ma hope o nā mea a pau, inā ua mākaukau ka mea hoʻohana e hoʻokomo i kahi ʻike i kekahi i mea e hoʻonui ai i ka nui o ka disk, a laila ua hoʻomaikaʻi ʻo ia i kāna mau kiʻi i ka wā lōʻihi, a ʻaʻole makemake ʻo ia e hana i kēia no ka makaʻu i ka nalowale o ka maikaʻi.

F5

ʻO kahi ʻohana holoʻokoʻa o nā algorithm e kūpono i kēia mau kūlana, hiki iā ʻoe ke hoʻomaʻamaʻa iā ʻoe iho i keia hoike maikai. ʻO ka mea kiʻekiʻe loa o lākou ka algorithm F5 na Andreas Westfeld, e hana pū ana me nā coefficients o ka ʻāpana ʻālohilohi, ʻoiai ʻo ka maka o ke kanaka ka mea liʻiliʻi loa i kona mau loli. Eia kekahi, hoʻohana ia i kahi ʻenehana hoʻopili e pili ana i ka hoʻopili ʻana i ka matrix, kahi e hiki ai ke hoʻololi liʻiliʻi i ka wā e hoʻokomo ai i ka nui o ka ʻike, ʻoi aku ka nui o ka ipu i hoʻohana ʻia.

ʻO nā hoʻololi iā lākou iho e hoʻohaʻahaʻa i ka waiwai piha o nā coefficients e kekahi ma lalo o kekahi mau kūlana (ʻo ia hoʻi, ʻaʻole i nā manawa a pau), hiki iā ʻoe ke hoʻohana i ka F5 no ka hoʻopaʻa ʻana i ka ʻikepili ma kāu hard drive. ʻO ka manaʻo, ʻo ka coefficient ma hope o ia hoʻololi e noho liʻiliʻi paha ma hope o ka hoʻopili ʻana o Huffman ma muli o ka hoʻohele helu helu o nā waiwai ma JPEG, a e hāʻawi nā zeros hou i ka waiwai i ka wā e hoʻopili ai iā lākou me ka hoʻohana ʻana iā RLE.

ʻO nā hoʻololi e pono ai e hoʻopau i ka ʻāpana kuleana no ka hūnā (hoʻonohonoho hou ʻana i ka ʻōlelo huna), ka mea e mālama ai i nā kumuwaiwai a me ka manawa hoʻokō, a hoʻohui i kahi hana no ka hana ʻana me nā faila he nui ma kahi o ka manawa hoʻokahi. ʻAʻole makemake paha ka mea heluhelu i ke kaʻina hana hoʻololi i nā kikoʻī hou aku, no laila e neʻe mākou i kahi wehewehe o ka hoʻokō.

ʻEnehana kiʻekiʻe

No ka hōʻike ʻana i ke ʻano o ka hana ʻana o kēia ala, ua hoʻokō wau i ke ʻano i loko o ka C maʻemaʻe a ua hoʻokō i ka nui o nā optimizations ma ke ʻano o ka wikiwiki o ka hoʻokō a me ka hoʻomanaʻo (ʻaʻole hiki iā ʻoe ke noʻonoʻo i ka nui o kēia mau kiʻi me ka ʻole o ka paʻi ʻana, ʻoiai ma mua o DCT). Loaʻa ʻia ka cross-platform me ka hoʻohana ʻana i nā hale waihona puke libjpeg, pcre и liʻiliʻi, mahalo mākou iā lākou. Hoʻohui ʻia kēia mau mea a pau e ka 'make', no laila makemake nā mea hoʻohana Windows e hoʻokomo i kekahi Cygwin no lākou iho no ka loiloi, a i ʻole e hana me Visual Studio a me nā hale waihona puke ma o lākou iho.

Loaʻa ka hoʻokō ma ke ʻano o ka console utility a me ka waihona. Hiki i ka poʻe makemake ke ʻike hou aku e pili ana i ka hoʻohana ʻana i ka mea hope ma ka readme i ka waihona ma Github, ka loulou aʻu e hoʻopili ai ma ka hope o ka pou.

Pehea e hoʻohana ai?

E akahele. Koho ʻia nā kiʻi i hoʻohana ʻia no ka hoʻopili ʻana ma ka huli ʻana me ka hoʻohana ʻana i kahi ʻōlelo maʻamau i ka papa kuhikuhi kumu i hāʻawi ʻia. I ka pau ʻana, hiki ke hoʻoneʻe ʻia nā faila, inoa hou a kope ʻia ma ka makemake i loko o kona mau palena, hoʻololi i ka faila a me nā ʻōnaehana hana, a me nā mea ʻē aʻe. ʻO ka lilo ʻana o ka waiwai o hoʻokahi bit hiki ʻole ke hoʻihoʻi hou i ka ʻike.

I ka pau ʻana, waiho ka pono i kahi faila waihona kūikawā i loaʻa nā ʻike āpau e pono ai no ka wehe ʻana, me ka ʻikepili e pili ana i nā kiʻi i hoʻohana ʻia. ʻO ia iho, ʻelua kilobytes kona kaumaha a ʻaʻohe hopena koʻikoʻi i ka wahi disk i noho ʻia.

Hiki iā ʻoe ke kālailai i ka mana hiki ke hoʻohana i ka hae '-a': './f5ar -a [kōnae hulina] [huaʻōlelo maʻamau kūpono-Perl]'. Hoʻopau ʻia ka paʻi ʻana me ke kauoha './f5ar -p [pūnaewele huli] [huaʻōlelo maʻamau e like me Perl-compatible] [faila i hoʻopaʻa ʻia] [inoa waihona]', a wehe ʻia me './f5ar -u [faila waihona] [inoa faila i hoʻihoʻi ʻia. ]' .

Hōʻike i ka hana

No ka hōʻike ʻana i ka maikaʻi o ke ʻano, ua hoʻouka wau i kahi hōʻiliʻili o 225 mau kiʻi manuahi manuahi o nā ʻīlio mai ka lawelawe. Unsplash a loaʻa i loko o nā palapala kahi pdf nui o 45 mika o ka lua o ka lua Noi o ka Papahana Knuta.

He mea maʻalahi ke kaʻina:

$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/

$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 17.0s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 39.4s
Saving the archive... ok

$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.4s
Decompressing... done in 21.0s
Writing extracted data... ok

$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf

$ du -sh dogs/
551M dogs/

Kiʻi kiʻi no nā mea pā

E pili ana i kahi ʻano ʻokoʻa no ka mālama ʻana i kahi ākea paʻa

Hiki ke heluhelu ʻia ka faila i wehe ʻole ʻia:

E pili ana i kahi ʻano ʻokoʻa no ka mālama ʻana i kahi ākea paʻa

E like me kāu e ʻike ai, mai ka 633 + 36 == 669 megabytes o ka ʻikepili ma ka hard drive, ua hele mākou i kahi ʻoluʻolu 551. Ua wehewehe ʻia kēlā ʻano ʻokoʻa e ka emi ʻana o nā waiwai o nā coefficients, e pili ana i kā lākou ʻO ka hoʻoemi ʻole ʻia ʻana: hiki i ka hoʻemi ʻana i hoʻokahi i hoʻokahi wale nō hiki ke "ʻoki i ʻelua mau paita mai ka faila hope loa. Eia nō naʻe, ʻo kēia ka nalowale o ka ʻikepili, ʻoiai he mea liʻiliʻi loa, āu e hoʻomanawanui ai.

ʻO ka mea pōmaikaʻi, ʻaʻole ʻike ʻia lākou e ka maka. Ma lalo o ka mea hao (no ka mea ʻaʻole hiki i ka habrastorage ke mālama i nā faila nui), hiki i ka mea heluhelu ke loiloi i ka ʻokoʻa ma o ka maka a me ko lākou ikaika, loaʻa ma ka unuhi ʻana i nā waiwai o ka mea i hoʻololi ʻia mai ka mea kumu: kumu, me ka ʻike i loko, ʻokoʻa (ʻo ka ʻeleʻele o ke kala, ʻoi aku ka liʻiliʻi o ka ʻokoʻa o ka poloka).

Ma kahi o ka hopena

Ke noʻonoʻo nei i kēia mau pilikia a pau, ke kūʻai ʻana i kahi kīkī paʻakikī a i ʻole ka hoʻouka ʻana i nā mea āpau i ke ao e like paha me kahi hopena maʻalahi loa i ka pilikia. Akā ʻoiai mākou e noho nei i kahi manawa maikaʻi loa i kēia manawa, ʻaʻohe mea e hōʻoiaʻiʻo i ka lā ʻapōpō hiki ke hele ma ka pūnaewele a hoʻouka i kāu ʻikepili hou aʻe ma kahi. A i ʻole e hele i ka hale kūʻai a kūʻai aku iā ʻoe iho i kahi pahu paʻa ʻē aʻe tausani terabyte. Akā hiki iā ʻoe ke hoʻohana i nā hale e kū nei.

-> GitHub

Source: www.habr.com

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