JÀrjekordne kasutaja soovib kirjutada kÔvakettale uue andmeploki, kuid tal pole selleks piisavalt vaba ruumi. Ei soovi ka midagi kustutada, sest "kÔik on vÀga oluline ja vajalik". Mida me sellega teeme?
Selline probleem ei ole ainult tema oma. Meie kÔvaketastel lebab teraabandeid teavet, ja see arv ei kavatse vÀheneda. Kuid kui unikaalne see on? LÔppude lÔpuks on kÔik failid lihtsalt kindla pikkusega bitikogumid ning tÔenÀoliselt ei erine uus oluliselt juba salvestatud failist.
Muidugi on juba salvestatud andmepalade leidmine kĂ”vakettalt kui mitte lootusetu, siis vĂ€hemalt ebaefektiivne ĂŒlesanne. Teisest kĂŒljest, kui erinevus on vĂ€ike, siis vĂ”ib-olla natuke kohandada ...

TL;DR â teine katse rÀÀkida kummalisest andmete optimeerimise meetodist JPEG-failide abil, nĂŒĂŒd arusaadavamal kujul.
Bitidest ja erinevustest
Kui vĂ”tta kaks tĂ€iesti juhuslikku andmeplokki, siis on nende bittide keskmine kattuvus pooled. TĂ”epoolest, igas paaris (â00, 01, 10, 11âČ) on just pooled vÀÀrtustele kattuvuses, see on lihtne.
Aga loomulikult, kui me lihtsalt vĂ”tame kaks faili ja kohandame ĂŒhe teise jĂ€rgi, kaotame me ĂŒhe neist. Kui aga salvestame muudatused, siis leiutame lihtsalt uuesti. , mis eksisteerib ka ilma meie abita, kuigi tavaliselt ei kasutata seda samadel eesmĂ€rkidel. Saame proovida vĂ€iksema jĂ€rjestuse integreerimist suuremasse, kuid isegi sel juhul riskime andmefragmentide kriitilise kaduja kaotamisega, kui kasutame seda kĂ”ike mÀÀgiliselt.
Millest ja millisest on siis vĂ”imalik erinevust kĂ”rvaldada? Noh, see tĂ€hendab, et kasutaja salvestatud uus fail on lihtsalt bitijada, millega me iseenesest midagi teha ei saa. Seega tuleks jĂ€rjest otsida kĂ”vakettalt selliseid bitte, mida saaks muuta ilma vajaduseta erinevust salvestada, et oleks vĂ”imalik nende kadumist ĂŒle elada tĂ”siste tagajĂ€rgedeta. Ja on mĂ”istlik muuta mitte ainult faili failisĂŒsteemis, vaid ka mingit vĂ€hem tundlikku teavet selle sees. Kuid mida ja kuidas?
Sobivusmeetodid
Appi tulevad kaotusega tihendatud failid. KĂ”ik need jpeg, mp3 ja muud sarnased, kuigi nad on kaotusega tihendatud, sisaldavad palju bitte, mida on ohutu muuta. Saame kasutada edasijĂ”udnud tehnikaid, mis mĂ€rkamatult modifitseerivad nende komponente erinevates kodeerimise osades. Oodake. EdasijĂ”udnud tehnikad⊠mĂ€rkamatud modifikatsioonidâŠ ĂŒhte bitte teiseks⊠see on ju peaaegu !
TĂ”epoolest, teabe ĂŒhte vormi integreerimine meenutab selle meetodeid. Mul on mulje, et muudatused ei ole inimmeele jaoks tuvastatavad. Siinkohal lĂ€hevad teed lahku â meie ĂŒlesanne on vĂ”imaldada kasutajal oma kĂ”vakettale lisainfot salvestada, mis vĂ”ib talle ainult kahju tuua. Ta unustab selle veel.
SeetĂ”ttu, kuigi me saame neid kasutada, on vajalik teha mĂ”ned muudatused. Edasi seletan ja nĂ€itan neid ĂŒhe olemasoleva meetodi ja laialdaselt kasutatava failivormingu nĂ€itel.
Ć akaalid
Kui juba tihendada, siis maailma kÔige tihendatumat. RÀÀgime loomulikult JPEG-failidest. Lisaks sellele, et on olemas tohutult tööriistu ja meetodeid andmete integreerimiseks neisse, on see kÔige populaarsem graafiline formaat meie planeedil.

Siiski, et mitte koeratoitmist teha, tuleb piirata oma tegevusala selle formaadi failidega. Keegi ei armasta ĂŒhevĂ€rvilisi ruute, mis tekivad liigse tihendamise tĂ”ttu, seetĂ”ttu tuleks töötada juba tihendatud failiga, vĂ€ltides ĂŒmberkodeerimist.. Konkreetsemalt â tĂ€isarvuliste koefitsientidega, mis jÀÀvad alles pĂ€rast operatsioone, mis vastutavad andmete kadumise eest â DKP ja kvantimine, mida on suurepĂ€raselt kujutatud kodeerimise skeemil (aitĂ€h Bauman'i nimelise raamatukogu Vikile):

JPEG-failide optimeerimise meetodeid on palju. On kadudeta optimeerimine (jpegtran), on optimeerimine ««, mis tegelikult toovad sisule veel midagi, aga meid need ei huvita. Kui kasutaja on valmis ĂŒhte teavet teise sisse embedima, et suurendada vaba ruumi diskil, siis on ta oma pilte kas juba ammu optimeerinud vĂ”i ei taha sellest ĂŒldse kuulda, kartes kvaliteedi kaotust.
F5
Selliste tingimuste alla sobib suur hulk algoritme, millega saab tutvuda . KÔige arenenum neist on algoritm Andreas Westfeldi autoriteet, kes töötab heleduskomponentide koefitsientidega, kuna inimsilma tundlikkus on nende muutuste suhtes kÔige vÀiksem. Veelgi enam, ta rakendab kodeerimismatriisi pÔhjal embedimisprotsessi, mis vÔimaldab saavutada vÀhem muutusi sama informatsiooni embedimise korral, kui konteineri suurus on suurem.
Muudatused piirdusid koefitsiendi absoluutvÀÀrtuse vĂ€hendamisega ĂŒhe vÀÀrtuse vĂ”rra teatud tingimustes (ehkki mitte alati), mis vĂ”imaldab kasutada F5 andmete salvestamise optimeerimiseks kĂ”vakettal. Asi on selles, et pĂ€rast seda muutust on koefitsient tĂ”enĂ€oliselt vĂ€iksema bittide arvu all Huffmani kodeerimise tĂ”ttu JPEG-i vÀÀrtuste statistilise jaotuse pĂ”hjal ning uued nullid pakuvad RLE kodeerimisel eeliseid.
Tugemised muudatused seisnevad osa kĂ”rvaldamises, mis vastutab privaatsuse (parooli segamise) eest, mis vĂ”imaldab sÀÀsta ressursse ja tĂ€itmise aega, ning mitme faili töötlemise mehhanismi lisamises ĂŒhe faili asemel. Protsessi muutmise kohta ei pruugi lugejale ĂŒksikasjad huvi pakkuda, seega liigume edasi rakendamise kirjeldusele.
Tipptasemel tehnoloogia
Sellise lĂ€henemise demonstreerimiseks rakendasin meetodi puhta C keeles ning viisain lĂ€bi rea optimeerimisi nii tĂ€itmise kiirusel kui ka mĂ€lus (te ei kujuta ette, kui palju need pildid kaaluvad isegi kohelduna DCT jaoks). Platvormidevaheline tugi saavutatakse raamatukogude kombinatsiooni kasutamisega. , ja , mille eest neile tĂ€nu. KĂ”ik see kogutakse âmakeâ kĂ€suga, seega Windowsi kasutajad peavad hindamiseks endale installima Cygwini vĂ”i iseseisvalt Visual Studio ja raamatukogudega tegelema.
Rakendus on saadaval konsooli utiliidi ja raamatukoguna. Ăksikasjalikumalt viimase kasutamisest saavad huvilised tutvuda readmi kaudu GitHubis, mille lingi lisan postituse lĂ”ppu.
Kuidas kasutada?
Ohtus on tĂ”hus. Pildid, mida kasutatakse pakkimiseks, valitakse mÀÀratud juurkatalooge sobitades regulaarselt vĂ€ljendeid. PĂ€rast seda saab faile soovitud viisil liigutada, nime muuta ja kopeerida, samuti operatsioonisĂŒsteemi ja faile muuta jne. Siiski tuleb olla ÀÀrmiselt ettevaatlik ja mitte muuta sisu. Isegi ĂŒhe biti vÀÀrtuse kaotamine vĂ”ib pĂ”hjustada teabe taastamise vĂ”imatuse.
PÀrast töö lÔpetamist jÀtab utiliit erifaili, mis sisaldab kogu vajalikku teavet dekompresseerimiseks, sealhulgas teavet kasutatud piltide kohta. Fail kaalub iseenesest paar kilobaiti ja ei avalda mingit mÀrkimisvÀÀrset mÔju kasutatud kettaruumi hulgale.
VĂ”imaliku mahutavuse analĂŒĂŒsimiseks saab kasutada lippu â-aâ: â./f5ar -a [otsingukaust] [Perl-ĂŒhilduv regulaarne vĂ€ljend]â. Pakkimine toimub kĂ€su abil â./f5ar -p [otsingukaust] [Perl-ĂŒhilduv regulaarne vĂ€ljend] [pakitav fail] [arhivi nimi]â, ent dekompresseerimine toimub kĂ€suga â./f5ar -u [arhivifail] [taastatud faili nimi]â.
Demonstratsioon
Meetodi efektiivsuse nĂ€itamiseks laadisin ĂŒles 225 tĂ€iesti tasuta koerapilti teenusest ja ja leidis dokumentidest suure pdf-faili, mille pikkus on 45 meetrit, teise köite kohta Knuth.
JĂ€rjestus on ĂŒsna lihtne:
$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/
$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Loen tihendatud faili... okei
Arhiivi initsialiseerimine... okei
Raamatukogude kapatsiteedi analĂŒĂŒs... tehtud 17,0s
Tuvastatud - mingil mÀÀral garanteeritud maht 48439359 bait
Tuvastatud vÔimalik maht kuni 102618787 bait
Tihendamine... tehtud 39,4s
Arhiivi salvestamine... okei
$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Arhiivi initsialiseerimine... okei
Lugen arhiivifaili... okei
Arhiivi tÀitmine failidega... tehtud 1,4s
Dekompressioon... tehtud 21,0s
Asetatud andmete kirjutamine... okei
$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf
$ du -sh dogs/
551M dogs/Ekraanipildid entusiastidele

PÀrast lahtipakkimist on faili endiselt vÔimalik ja vajalik lugeda:

Nagu nĂ€ha, liikusime algsetelt 633 + 36 == 669 megabaidilt kĂ”vakettal meeldivamale 551-le. Selline radikaalne erinevus seletab neid sama mÀÀrade langust, mis mĂ”jutavad nende hilisemaid kahjutuid tihendamise vÀÀrtusi: ĂŒhe nt vĂ€hendamine vĂ”ib rahulikult «lĂ€ikida» paar bait'i lĂ”ppfailist. Siiski on see ikkagi andmete kadu, ehkki ÀÀrmiselt vĂ€ike, millega tuleb leppida.
Ănneks pole need silmale absoluutselt nĂ€htavad. Spoileri all (kuna habrastorage ei suuda suuri faile töödelda) saab lugeja hinnata vahet nii visuaalselt kui ka nende intensiivsust, mis on saadud muudetud komponendi vÀÀrtuste originaalist lahutamisel: , , (mida tuhmim on vĂ€rv, seda vĂ€hem on erinevusi blokis).
KokkuvÔtte asemel
Vaadates kĂ”iki neid keerukusi, vĂ”ib kĂ”vaketta ostmine vĂ”i kĂ”ik pilve ĂŒles laadimine tunduda palju lihtsama lahendusena. Kuid kuigi me elame praegu nii ilusas ajastus, ei ole mingit garantiid, et homme on endiselt vĂ”imalik internetti pÀÀseda ja kogu oma liigse teabe kuhugi ĂŒles laadida. VĂ”i minna poodi ja osta endale uus tuhat terabaidi kĂ”vaketas. Kuid kodus juba olemasolevat saab alati kasutada.
->
Allikas: habr.com
