Një përdorues tjetër dëshiron të shkruajë një pjesë të re të të dhënave në hard disk, por ai nuk ka hapësirë të mjaftueshme të lirë për ta bërë këtë. Unë gjithashtu nuk dua të fshij asgjë, pasi "gjithçka është shumë e rëndësishme dhe e nevojshme". Dhe çfarë duhet të bëjmë me të?
Askush nuk e ka këtë problem. Ka terabajt informacion në hard disqet tona dhe kjo sasi nuk ka tendencë të ulet. Por sa unik është? Në fund të fundit, të gjithë skedarët janë vetëm grupe pjesësh me një gjatësi të caktuar dhe, ka shumë të ngjarë, i riu nuk është shumë i ndryshëm nga ai që është ruajtur tashmë.
Është e qartë se kërkimi i pjesëve të informacionit të ruajtura tashmë në një hard disk është, nëse jo një dështim, atëherë të paktën jo një detyrë efektive. Nga ana tjetër, nëse diferenca është e vogël, atëherë mund ta rregulloni pak...
TL;DR - përpjekja e dytë për të folur për një metodë të çuditshme të optimizimit të të dhënave duke përdorur skedarë JPEG, tani në një formë më të kuptueshme.
Rreth bitave dhe ndryshimit
Nëse merrni dy pjesë krejtësisht të rastësishme të të dhënave, atëherë mesatarisht gjysma e biteve që ato përmbajnë përkojnë. Në të vërtetë, midis paraqitjeve të mundshme për çdo çift ('00, 01, 10, 11'), saktësisht gjysma kanë të njëjtat vlera, gjithçka është e thjeshtë këtu.
Por sigurisht, nëse marrim vetëm dy skedarë dhe vendosim një në të dytën, atëherë do të humbasim njërën prej tyre. Nëse i ruajmë ndryshimet, thjesht do të rishpikim
Midis çfarë dhe çfarë atëherë mund të eliminohet ndryshimi? Epo, domethënë, një skedar i ri i shkruar nga përdoruesi është vetëm një sekuencë bitash, me të cilat ne nuk mund të bëjmë asgjë në vetvete. Atëherë ju vetëm duhet të gjeni pjesë të tilla në hard disk që ato të mund të ndryshohen pa pasur nevojë të ruani ndryshimin, në mënyrë që të mbijetoni humbjen e tyre pa pasoja të rënda. Dhe ka kuptim të ndryshoni jo vetëm skedarin në vetë FS, por disa informacione më pak të ndjeshme brenda tij. Por cili dhe si?
Metodat e montimit
Skedarët e ngjeshur me humbje vijnë në shpëtim. Të gjitha këto jpeg, mp3 dhe të tjera, megjithëse kompresim me humbje, përmbajnë një mori pjesësh që mund të ndryshohen në mënyrë të sigurt. Është e mundur të përdoren teknika të avancuara që modifikojnë në mënyrë të padukshme përbërësit e tyre në faza të ndryshme të kodimit. Prisni. Teknika të avancuara... modifikim i padukshëm... një pjesë në tjetrën... është pothuajse si
Në të vërtetë, futja e një informacioni në një tjetër të kujton metodat e saj si asgjë tjetër. Më bën përshtypje edhe padukshmëria e ndryshimeve të bëra në shqisat njerëzore. Aty ku shtigjet ndryshojnë është në fshehtësi: detyra jonë zbret tek përdoruesi që të fut informacione shtesë në hard diskun e tij; kjo vetëm do ta dëmtojë atë. Ai do të harrojë përsëri.
Prandaj, megjithëse mund t'i përdorim ato, duhet të bëjmë disa modifikime. Dhe pastaj unë do t'i tregoj dhe do t'i tregoj duke përdorur shembullin e një prej metodave ekzistuese dhe një formati të përbashkët skedari.
Rreth çakejve
Nëse vërtet e shtrydhni, është gjëja më e ngjeshshme në botë. Ne, natyrisht, po flasim për skedarët JPEG. Jo vetëm që ka shumë mjete dhe metoda ekzistuese për futjen e të dhënave në të, por është formati më i popullarizuar i grafikës në këtë planet.
Sidoqoftë, për të mos u angazhuar në mbarështimin e qenve, duhet të kufizoni fushën tuaj të aktivitetit në skedarë të këtij formati. Askush nuk i pëlqen kuadratet njëngjyrëshe që shfaqen për shkak të ngjeshjes së tepërt, kështu që duhet të kufizoheni në punën me një skedar tashmë të kompresuar, duke shmangur rikodimin. Më konkretisht, me koeficientët e plotë, që mbeten pas operacioneve përgjegjëse për humbjen e të dhënave - DCT dhe kuantizimi, i cili shfaqet në mënyrë perfekte në skemën e kodimit (falë wiki-t të Bibliotekës Kombëtare Bauman):
Ka shumë metoda të mundshme për optimizimin e skedarëve jpeg. Ka optimizim pa humbje (jpegtran), ka optimizim "
F5
Një familje e tërë algoritmesh i përshtatet këtyre kushteve, me të cilat mund të njiheni
Vetë ndryshimet zbresin në zvogëlimin e vlerës absolute të koeficientëve me një në kushte të caktuara (d.m.th., jo gjithmonë), gjë që ju lejon të përdorni F5 për të optimizuar ruajtjen e të dhënave në hard diskun tuaj. Çështja është se koeficienti pas një ndryshimi të tillë ka shumë të ngjarë të zërë më pak bit pas kodimit të Huffman për shkak të shpërndarjes statistikore të vlerave në JPEG, dhe zerot e reja do të japin një fitim kur i kodojnë ato duke përdorur RLE.
Modifikimet e nevojshme zbresin në eliminimin e pjesës përgjegjëse për fshehtësinë (rirregullimi i fjalëkalimit), i cili kursen burimet dhe kohën e ekzekutimit, dhe shtimin e një mekanizmi për të punuar me shumë skedarë në vend të një në një kohë. Lexuesi nuk ka gjasa të jetë i interesuar për procesin e ndryshimit në më shumë detaje, kështu që le të kalojmë në një përshkrim të zbatimit.
Teknologji e larte
Për të demonstruar se si funksionon kjo qasje, unë zbatova metodën në C të pastër dhe bëra një sërë optimizimesh si për sa i përket shpejtësisë së ekzekutimit ashtu edhe memorjes (nuk mund ta imagjinoni se sa peshojnë këto foto pa kompresim, madje edhe para DCT). Ndër-platformë e arritur duke përdorur një kombinim të bibliotekave
Zbatimi është i disponueshëm në formën e një programi të konsolës dhe bibliotekës. Të interesuarit mund të mësojnë më shumë rreth përdorimit të kësaj të fundit në readme në depo në Github, lidhjen të cilës do t'i bashkëngjis në fund të postimit.
Si të përdorni?
Me kujdes. Imazhet e përdorura për paketim zgjidhen duke kërkuar duke përdorur një shprehje të rregullt në direktorinë e dhënë rrënjë. Pas përfundimit, skedarët mund të zhvendosen, riemërohen dhe kopjohen sipas dëshirës brenda kufijve të tij, të ndryshojnë skedarët dhe sistemet operative, etj. Megjithatë, duhet të jeni jashtëzakonisht të kujdesshëm dhe të mos ndryshoni përmbajtjen e menjëhershme në asnjë mënyrë. Humbja e vlerës së qoftë edhe një biti mund ta bëjë të pamundur rikuperimin e informacionit.
Pas përfundimit, programi lë një skedar të posaçëm arkiv që përmban të gjithë informacionin e nevojshëm për shpaketimin, duke përfshirë të dhënat për imazhet e përdorura. Në vetvete, ai peshon rreth disa kilobajt dhe nuk ka ndonjë ndikim të rëndësishëm në hapësirën e zënë të diskut.
Mund të analizoni kapacitetin e mundshëm duke përdorur flamurin '-a': './f5ar -a [dosja e kërkimit] [Shprehja e rregullt e përputhshme me Perl]'. Paketimi bëhet me komandën './f5ar -p [dosja e kërkimit] [Shprehja e rregullt e përputhshme me Perl] [skedari i paketuar] [emri i arkivit]' dhe zbërthimi me './f5ar -u [skedari i arkivit] [emri i skedarit të rikuperuar ]'.
Demonstrimi i punës
Për të treguar efektivitetin e metodës, ngarkova një koleksion prej 225 fotografish absolutisht falas të qenve nga shërbimi
Sekuenca është mjaft e thjeshtë:
$ 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/
Pamjet e ekranit për fansat
Skedari i paketuar mund dhe duhet ende të lexohet:
Siç mund ta shihni, nga 633 + 36 == 669 megabajt origjinale të të dhënave në hard disk, arritëm në 551 më të këndshëm. Një ndryshim i tillë rrënjësor shpjegohet me uljen e vlerave të koeficientëve, gjë që ndikon në to. Kompresimi i mëvonshëm pa humbje: zvogëlimi i një nga një mund të "presë lehtësisht disa bajt nga skedari përfundimtar. Sidoqoftë, kjo është ende një humbje e të dhënave, megjithëse jashtëzakonisht e vogël, me të cilën do të duhet të duroni.
Për fat të mirë, ato janë absolutisht të padukshme për syrin. Nën spoilerin (pasi habrastorage nuk mund të trajtojë skedarë të mëdhenj), lexuesi mund të vlerësojë ndryshimin si me sy ashtu edhe me intensitetin e tyre, të marrë duke zbritur vlerat e përbërësit të ndryshuar nga origjinali:
Në vend të një përfundimi
Duke marrë parasysh të gjitha këto vështirësi, blerja e një hard disk ose ngarkimi i gjithçkaje në cloud mund të duket si një zgjidhje shumë më e thjeshtë për problemin. Por edhe pse jetojmë në një kohë kaq të mrekullueshme tani, nuk ka asnjë garanci se nesër do të jetë ende e mundur të shkoni në internet dhe të ngarkoni të gjitha të dhënat tuaja shtesë diku. Ose shkoni në dyqan dhe blini vetes një hard disk një mijë terabyte. Por gjithmonë mund të përdorni shtëpitë ekzistuese.
->
Burimi: www.habr.com