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 ...
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
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
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.
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):
Gen anpil metòd posib pou optimize dosye jpeg. Gen optimize san pèt (jpegtran), gen optimize "
F5
Yon fanmi antye nan algoritm adapte kondisyon sa yo, ki ou ka familyarize tèt ou avèk yo
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
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.
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
Fichye ki pa pake a ka epi li dwe toujou li:
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:
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.
->
Sous: www.habr.com