Konsènan yon metòd etranj pou ekonomize espas ki gen kapasite difisil

Yon lòt itilizatè vle ekri yon nouvo moso done sou kondwi a difisil, men li pa gen ase espas gratis pou fè sa. Mwen menm mwen pa vle efase anyen, paske "tout bagay trè enpòtan ak nesesè." E kisa nou ta dwe fè ak li?

Pa gen moun ki gen pwoblèm sa a. Genyen terabytes enfòmasyon sou disques di nou yo, ak kantite lajan sa a pa gen tandans pou diminye. Men, ki jan inik li ye? Nan fen a, tout fichye yo se jis ansanm Bits nan yon longè sèten epi, gen plis chans, yon sèl nan nouvo pa anpil diferan de youn nan ki deja estoke.

Li klè ke rechèch pou moso enfòmasyon ki deja estoke sou yon kondwi difisil se, si se pa yon echèk, Lè sa a, omwen pa yon travay efikas. Nan lòt men an, si diferans lan piti, Lè sa a, ou ka ajiste li yon ti kras ...

Konsènan yon metòd etranj pou ekonomize espas ki gen kapasite difisil

TL; DR - dezyèm tantativ pou pale sou yon metòd etranj nan optimize done lè l sèvi avèk fichye JPEG, kounye a nan yon fòm ki pi konprann.

Konsènan ti moso ak diferans

Si ou pran de moso done konplètman o aza, Lè sa a, an mwayèn mwatye nan Bits yo genyen kowenside. Vreman vre, nan mitan kouman posib pou chak pè ('00, 01, 10, 11′), egzakteman mwatye gen menm valè yo, tout bagay se senp isit la.

Men, nan kou, si nou jis pran de dosye ak anfòm youn nan dezyèm lan, Lè sa a, nou pral pèdi youn nan yo. Si nou sove chanjman yo, nou pral tou senpleman reenvante delta kodaj, ki egziste parfe byen san nou, byenke li pa anjeneral itilize pou menm rezon yo. Nou ka eseye entegre yon sekans ki pi piti nan yon sekans ki pi gwo, men menm si nou riske pèdi segman kritik nan done si nou itilize li ensousyan ak tout bagay.

Ant sa ak sa lè sa a, diferans lan ka elimine? Oke, se sa ki, yon nouvo dosye ekri pa itilizatè a se jis yon sekans nan Bits, ak ki nou pa ka fè anyen pou kont li. Lè sa a, ou jis bezwen jwenn moso sa yo sou kondwi a difisil yo ka chanje san yo pa gen nan magazen diferans lan, pou ke ou ka siviv pèt yo san yo pa konsekans grav. Epi li fè sans pou chanje pa sèlman fichye a sou FS nan tèt li, men kèk enfòmasyon mwens sansib andedan li. Men, kiyès ak ki jan?

Fitting metòd

Lossy dosye konprese yo vin pote sekou. Tout sa yo jpeg, mp3 ak lòt moun, byenke konpresyon pèt, gen yon pakèt moun sou Bits ki ka san danje chanje. Li posib yo sèvi ak teknik avanse ki insansibl modifye eleman yo nan plizyè etap nan kodaj. Tann. Teknik avanse... modifikasyon insansibl... yon ti jan nan yon lòt... li prèske tankou esteganografi!

Vreman vre, entegre yon enfòmasyon nan yon lòt se okoumansman de metòd li yo tankou pa gen anyen lòt bagay. Mwen enpresyone tou pa enpèsesiblite chanjman yo te fè nan sans imen yo. Ki kote chemen yo divèje se an sekrè: travay nou an se desann nan itilizatè a antre enfòmasyon adisyonèl sou disk di li; li pral sèlman mal li. Li pral bliye ankò.

Se poutèt sa, byenke nou ka itilize yo, nou bezwen fè kèk modifikasyon. Apre sa, mwen pral di ak montre yo lè l sèvi avèk egzanp lan nan youn nan metòd yo ki deja egziste ak yon fòma dosye komen.

Konsènan chakal

Si ou reyèlman peze li, li nan bagay ki pi konpresib nan mond lan. Nou ap, nan kou, pale sou dosye JPEG. Non sèlman gen tòn zouti ak metòd ki egziste deja pou entegre done nan li, men li se fòma grafik ki pi popilè sou planèt sa a.

Konsènan yon metòd etranj pou ekonomize espas ki gen kapasite difisil

Sepandan, yo nan lòd yo pa angaje yo nan elvaj chen, ou bezwen limite jaden ou nan aktivite nan dosye nan fòma sa a. Pèsonn pa renmen kare kamayeu ki parèt akòz konpresyon twòp, kidonk ou bezwen limite tèt ou nan travay ak yon dosye ki deja konprese, evite kodaj. Plis espesyalman, ak koyefisyan nonb antye relatif, ki rete apre operasyon ki responsab pou pèt done - DCT ak quantization, ki se parfe parèt nan konplo a kodaj (gras a wiki a nan Bibliyotèk Nasyonal Bauman):
Konsènan yon metòd etranj pou ekonomize espas ki gen kapasite difisil

Gen anpil metòd posib pou optimize dosye jpeg. Gen optimize san pèt (jpegtran), gen optimize "pa gen okenn pèt", ki aktyèlman kontribye yon lòt bagay, men nou pa pran swen yo. Apre yo tout, si itilizatè a se pare yo entegre yon enfòmasyon nan yon lòt yo nan lòd yo ogmante espas ki gen kapasite gratis, Lè sa a, li swa optimize imaj li yon bon bout tan de sa, oswa li pa vle fè sa a ditou pou yo pè pèt nan bon jan kalite.

F5

Yon fanmi antye nan algoritm adapte kondisyon sa yo, ki ou ka familyarize tèt ou avèk yo nan bon prezantasyon sa a. Ki pi avanse nan yo se algorithm la F5 pa Andreas Westfeld, k ap travay ak koyefisyan yo nan eleman nan klète, depi je imen an se pi piti sansib a chanjman li yo. Anplis, li sèvi ak yon teknik embedding ki baze sou kodaj matris, ki fè li posib pou fè mwens chanjman lè entegre menm kantite enfòmasyon, se pi gwo gwosè veso yo itilize a.

Chanjman yo tèt yo diminye valè absoli koyefisyan yo pa youn nan sèten kondisyon (ki vle di, pa toujou), ki pèmèt ou sèvi ak F5 pou optimize depo done sou kondwi difisil ou. Pwen an se ke koyefisyan an apre yon chanjman sa a pral gen plis chans okipe mwens Bit apre Huffman kodaj akòz distribisyon an estatistik nan valè nan JPEG, ak nouvo zewo yo pral bay yon benefis lè kode yo lè l sèvi avèk RLE.

Modifikasyon ki nesesè yo se elimine pati ki responsab pou sekrè (rearanjman modpas), ki sove resous ak tan ekzekisyon, epi ajoute yon mekanis pou travay ak anpil dosye olye pou yo youn nan yon moman. Lektè a pa fasil pou enterese nan pwosesis chanjman an plis detay, kidonk ann ale nan yon deskripsyon aplikasyon an.

Segondè teknoloji

Pou demontre ki jan apwòch sa a ap travay, mwen aplike metòd la nan pi C ak te pote soti yon kantite optimize tou de an tèm de vitès ekzekisyon ak memwa (ou pa ka imajine konbyen foto sa yo peze san konpresyon, menm anvan DCT). Cross-platform reyalize lè l sèvi avèk yon konbinezon de bibliyotèk libjpeg, pcre и tinydir, pou sa nou remèsye yo. Tout bagay sa yo mete ansanm pa 'fè', kidonk itilizatè Windows vle enstale kèk Cygwin pou tèt yo pou evalyasyon, oswa fè fas ak Visual Studio ak bibliyotèk poukont yo.

Aplikasyon an disponib nan fòm yon sèvis piblik konsole ak bibliyotèk. Moun ki enterese ka jwenn plis enfòmasyon sou lè l sèvi avèk lèt ​​la nan readme a nan repozitwa a sou Github, lyen ki mwen pral tache nan fen pòs la.

Kouman pou itilize?

Ak anpil atansyon. Imaj yo itilize pou anbalaj yo chwazi lè w ap chèche lè l sèvi avèk yon ekspresyon regilye nan anyè rasin yo bay la. Lè yo fini, dosye yo ka deplase, chanje non ak kopye nan limit li yo, chanje dosye ak sistèm opere, elatriye Sepandan, ou ta dwe fè anpil atansyon epi yo pa chanje kontni imedya a nan okenn fason. Pèdi valè a nan menm yon ti jan ka fè li enposib refè enfòmasyon.

Lè yo fini, sèvis piblik la kite yon fichye achiv espesyal ki gen tout enfòmasyon ki nesesè pou depale, ki gen ladan done sou imaj yo itilize yo. Pou kont li, li peze sou yon koup de kilobyte epi li pa gen okenn enpak enpòtan sou espas ki la ki gen kapasite okipe.

Ou ka analize kapasite posib lè l sèvi avèk '-a' drapo a: './f5ar -a [rechèch folder] [Perl-konpatib regular expression]'. Anbalaj fèt ak kòmandman './f5ar -p [rechèch dosye] [Perl-konpatib ekspresyon regilye] [fichye pake] [non achiv]', ak debalaj ak './f5ar -u [fichiye achiv] [non fichye refè. ]' .

Demonstrasyon travay

Pou montre efikasite nan metòd la, mwen telechaje yon koleksyon 225 foto absoliman gratis nan chen nan sèvis la. Unsplash epi yo te jwenn nan dokiman yo yon gwo pdf 45 mèt nan dezyèm volim nan Atizay nan pwogramasyon Knuta.

Sekans la se byen senp:

$ 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/

Ekran pou fanatik yo

Konsènan yon metòd etranj pou ekonomize espas ki gen kapasite difisil

Fichye ki pa pake a ka epi li dwe toujou li:

Konsènan yon metòd etranj pou ekonomize espas ki gen kapasite difisil

Kòm ou ka wè, soti nan orijinal 633 + 36 == 669 megabyte nan done sou kondwi a difisil, nou te rive nan pi bèl 551. Yon diferans radikal konsa eksplike pa diminisyon nan valè yo nan koyefisyan yo, ki afekte yo. konpresyon ki vin apre san pèt: diminye youn pa jis yon sèl ka fasilman " koupe yon koup nan byte nan dosye final la. Sepandan, sa a se toujou yon pèt done, kwake yon sèl trè piti, ke ou pral oblije sipòte.

Erezman, yo absoliman envizib nan je a. Anba spoiler la (piske habrastorage pa ka okipe gwo dosye), lektè a ka evalye diferans lan tou de pa je ak entansite yo, ki te jwenn nan soustraksyon valè yo nan eleman ki chanje soti nan orijinal la: orijinal la, ak enfòmasyon andedan, diferans lan (plis koulè a, se pi piti diferans nan blòk la).

Olye pou yo yon konklizyon

Lè ou konsidere tout difikilte sa yo, achte yon kondwi difisil oswa telechaje tout bagay nan nwaj la ka sanble yon solisyon pi senp pou pwoblèm nan. Men, menmsi nou ap viv nan yon tan bèl bagay kounye a, pa gen okenn garanti ke demen li pral toujou posib yo ale sou entènèt ak telechaje tout done siplemantè ou yon kote. Oswa ale nan magazen an epi achte tèt ou yon lòt mil teraocte kondwi difisil. Men, ou ka toujou itilize kay ki egziste deja.

-> GitHub

Sous: www.habr.com

Add nouvo kòmantè