Circa un metudu stranu per salvà u spaziu di u discu duru

Un altru utilizatore vole scrive un novu pezzu di dati à u discu duru, ma ùn hà micca abbastanza spaziu liberu per fà questu. Ùn vogliu ancu sguassà nunda, postu chì "tuttu hè assai impurtante è necessariu". È chì duvemu fà cun ellu?

Nimu hà stu prublema. Ci sò terabytes d'infurmazioni nantu à i nostri discu duru, è questa quantità ùn tende micca à diminuisce. Ma quantu hè unicu? In fine, tutti i schedari sò solu inseme di bits di una certa lunghezza è, assai prubabilmente, u novu ùn hè micca assai sfarente di quellu chì hè digià almacenatu.

Hè chjaru chì a ricerca di pezzi d'infurmazioni digià almacenati in un discu duru hè, se micca un fallimentu, almenu micca un compitu efficace. Per d 'altra banda, se a diferenza hè chjuca, allora pudete aghjustà un pocu ...

Circa un metudu stranu per salvà u spaziu di u discu duru

TL; DR - u sicondu tentativu di parlà di un stranu metudu di ottimisazione di dati cù i schedari JPEG, avà in una forma più comprensibile.

Circa bits è differenza

Se pigliate dui pezzi di dati cumplettamente aleatorii, in media, a mità di i bits chì cuntenenu coincide. Infatti, trà e pussibuli layout per ogni paru ('00, 01, 10, 11′), esattamente a mità anu i stessi valori, tuttu hè simplice quì.

Ma di sicuru, s'è no pigghiamu solu dui schedari è fitte unu à u sicondu, allura avemu da perde unu di elli. Se salvemu i cambiamenti, solu reinventemu codificazione delta, chì esiste perfettamenti bè senza noi, ancu s'ellu ùn hè micca generalmente usatu per i stessi scopi. Pudemu pruvà à incrustà una sequenza più chjuca in una più grande, ma ancu cusì risicate di perde segmenti critichi di dati se l'utilizamu imprudente cù tuttu.

Trà chì è chì allora a diffarenza pò esse eliminata? Ebbè, questu hè, un novu schedariu scrittu da l'utilizatore hè solu una sequenza di bits, cù quale ùn pudemu micca fà nunda per ellu stessu. Allora vi basta à truvà tali bits nant'à u discu duru ch'elli ponu esse cambiatu senza avè à almacenà a diffarenza, cusì chì vi pò sopravvivere a so perdita senza cunsiquenzi serii. È hè sensu di cambià micca solu u schedariu nantu à u FS stessu, ma alcune informazioni menu sensibili in questu. Ma quale è cumu ?

I metudi di adattazione

I schedarii compressi perditi venenu in salvezza. Tutti issi jpegs, mp3 è altri, ancu s'è a compressione di perdita, cuntenenu una mansa di bits chì ponu esse cambiati in modu sicuru. Hè pussibule aduprà tecniche avanzate chì imperceptibly mudificà i so cumpunenti in diverse tappe di codificazione. Aspetta. Tecniche avanzate... mudificazione imperceptible... un pocu in l'altru... hè quasi cum'è steganografia!

In verità, l'incrustazione di una infurmazione in l'altru hè una reminiscenza di i so metudi cum'è nunda di più. Sò ancu impressuatu da l'imperceptibilità di i cambiamenti fatti à i sensi umani. Induve i percorsi divergenu hè in sicretu: u nostru compitu vene à l'utilizatore chì inserisce infurmazioni supplementari in u so discu duru; solu u dannu. Si scurderà di novu.

Dunque, ancu s'ellu pudemu usà, avemu bisognu di fà qualchì mudificazione. E poi vi dicu è li mostra cù l 'esempiu di unu di i metudi esistenti è un furmatu di schedariu cumuna.

À propositu di sciacalli

Sì veramente stringhje, hè a cosa più compressible in u mondu. Di sicuru, parlemu di i schedari JPEG. Ùn sò micca solu tunnellate di arnesi è metudi esistenti per incrustà dati in questu, ma hè u formatu graficu più populari in questu pianeta.

Circa un metudu stranu per salvà u spaziu di u discu duru

Tuttavia, per ùn impegnà in l'allevamentu di cani, avete bisognu di limità u vostru campu di attività in i schedarii di stu formatu. Nimu ùn piace à i quadrati monocromi chì appariscenu per via di una compressione eccessiva, cusì avete bisognu di limità à travaglià cù un schedariu digià cumpressu, evitendu a ricodificazione. Più specificamente, cù coefficienti interi, chì restanu dopu à l'operazioni rispunsevuli di a perdita di dati - DCT è quantization, chì hè perfettamenti affissatu in u schema di codificazione (grazie à a wiki di a Biblioteca Naziunale Bauman):
Circa un metudu stranu per salvà u spaziu di u discu duru

Ci sò parechji metudi pussibuli per ottimisà i fugliali jpeg. Ci hè ottimisazione senza perdita (jpegtran), ci hè ottimisazione "senza perdita", chì in realtà cuntribuiscenu qualcosa d'altru, ma ùn ci importa micca. Dopu tuttu, se l'utilizatore hè prontu à incrustà una infurmazione in l'altru in modu di aumentà u spaziu di discu liberu, allora hà ottimisatu e so imagine assai tempu fà, o ùn vole micca fà questu per paura di perdita di qualità.

F5

Una famiglia sana d'algoritmi si adatta à sti cundizioni, chì pudete familiarizà cun voi in sta bona presentazione. U più avanzatu di elli hè l'algoritmu F5 da Andreas Westfeld, travagliendu cù i coefficienti di u cumpunente di luminosità, postu chì l'ochju umanu hè u menu sensibile à i so cambiamenti. Inoltre, usa una tecnica d'incrustazione basata nantu à a codificazione matrice, chì permette di fà menu cambiamenti quandu incrustà a listessa quantità di informazioni, più grande hè a dimensione di u cuntinuu utilizatu.

I cambiamenti stessi si riducenu à riduce u valore assolutu di i coefficienti da unu in certi cundizioni (vale à dì, micca sempre), chì permette di utilizà F5 per ottimisà l'almacenamiento di dati in u vostru hard drive. U puntu hè chì u coefficientu dopu un tali cambiamentu probabilmente occuperà menu bits dopu a codificazione Huffman per via di a distribuzione statistica di i valori in JPEG, è i novi zeri daranu un guadagnu quandu li codificà cù RLE.

I mudificazioni necessarii sò sbulicati per eliminà a parte rispunsevuli di u sicretu (rearrangiamentu di a password), chì risparmia risorse è tempu d'esekzione, è aghjunghje un mecanismu per travaglià cù parechji schedari invece di unu à un tempu. U lettore hè improbabile di esse interessatu in u prucessu di cambiamentu in più detail, allora andemu à una descrizzione di l'implementazione.

Alta tecnulugia

Per dimustrà cumu funziona stu approcciu, aghju implementatu u metudu in puru C è realizatu una quantità di ottimisazioni sia in quantu à a velocità di esecuzione è a memoria (ùn pudete micca imagine quantu pesanu queste stampe senza compressione, ancu prima di DCT). Cross-piattaforma ottenuta utilizendu una cumminazione di biblioteche libjpeg, pcre и tinydir, per quale li ringraziemu. Tuttu chistu hè riunitu da 'make', cusì l'utilizatori di Windows volenu installà Cygwin per elli stessi per a valutazione, o trattà cù Visual Studio è biblioteche per sè stessu.

L'implementazione hè dispunibule in forma di utilità di cunsola è biblioteca. Quelli chì anu interessatu ponu sapè più nantu à l'usu di l'ultime in u readme in u repository in Github, u ligame à quale aghju aghjustatu à a fine di u post.

Cumu usu?

Cun cura. L'imaghjini utilizati per l'imballazione sò selezziunati da a ricerca cù una espressione regulare in u repertoriu radicale datu. Dopu à a fine, i schedari ponu esse spustati, rinominati è copiati à vuluntà in i so cunfini, cambià u schedariu è u sistema operatore, etc. Tuttavia, duvete esse assai attenti è micca cambià u cuntenutu immediata in ogni modu. Perde u valore di ancu un pocu pò rende impussibile di ricuperà l'infurmazioni.

Dopu à a fine, l'utilità abbanduneghja un schedariu d'archiviu speciale chì cuntene tutte l'infurmazioni necessarii per unpacking, cumprese dati nantu à l'imaghjini utilizati. Per ellu stessu, pesa circa un paru di kilobyte è ùn hà micca un impattu significativu in u spaziu di discu occupatu.

Pudete analizà a capacità pussibule utilizendu a bandiera '-a': './f5ar -a [cartulare di ricerca] [espressione regulare compatible Perl]'. L'imballu hè fattu cù u cumandimu './f5ar -p [cartulare di ricerca] [espressione regulare compatibile Perl] [fichiu pacatu] [nome di l'archiviu]', è unpacking cù './f5ar -u [file d'archiviu] [nome di u schedariu recuperatu. ]' .

Dimustrazione di u travagliu

Per dimustrà l'efficacità di u metudu, aghju carricatu una cullizzioni di 225 foto assolutamente gratuiti di cani da u serviziu. Unplays è truvò in i ducumenti un grande pdf di 45 metri di u sicondu vulume Arte di prugrammazione Knuta.

A sequenza hè abbastanza simplice:

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

Screenshots per i fan

Circa un metudu stranu per salvà u spaziu di u discu duru

U schedariu unpacked pò è deve sempre esse lettu:

Circa un metudu stranu per salvà u spaziu di u discu duru

Comu pudete vede, da l'uriginale 633 + 36 == 669 megabytes di dati nantu à u discu duru, avemu ghjuntu à più piacevule 551. Una diferenza cusì radicale hè spiegata da a diminuzione di i valori di i coefficienti, chì affetta u so. cumpressione senza perdita successiva: riducendu unu per unu pò facilmente "tagliate un paru di byte da u schedariu finali. Tuttavia, questu hè sempre una perdita di dati, ancu s'ellu hè assai chjuca, chì vi tuccherà à mette.

Fortunatamente, sò assolutamente invisibili à l'ochju. Sottu u spoiler (siccomu l'habrastorage ùn pò micca trattà i schedarii grossi), u lettore pò valutà a diffarenza sia per l'ochju sia per a so intensità, ottenuta sottraendu i valori di u cumpunente cambiatu da l'uriginale: l'uriginale, cù l'infurmazioni in l'internu, a diffarenza (u più opacu u culore, u più chjucu a diferenza in u bloccu).

Inveci di 'na cunchiusioni

Cunsiderendu tutte queste difficultà, cumprà un discu duru o caricate tuttu in u nuvulu pò esse una soluzione assai più simplice à u prublema. Ma ancu s'è no campemu in un tempu cusì maravigliu avà, ùn ci hè micca guarantisci chì dumane serà sempre pussibule di andà in linea è caricate tutti i vostri dati extra in qualchì locu. O vai à a tenda è cumprà un altru discu duru di mille terabyte. Ma pudete sempre aduprà e case esistenti.

-> GitHub

Source: www.habr.com

Add a comment