Pangguna liyane pengin nulis potongan data anyar menyang hard drive, nanging ora duwe papan sing cukup kanggo nindakake iki. Aku uga ora pengin mbusak apa-apa, amarga "kabeh iku penting banget lan perlu." Lan apa sing kudu kita lakoni?
Ora ana sing duwe masalah iki. Ana terabyte informasi ing hard drive kita, lan jumlah iki ora cenderung suda. Nanging carane unik iku? Ing pungkasan, kabeh file mung set bit saka dawa tartamtu lan, paling kamungkinan, sing anyar ora akeh beda saka sing wis disimpen.
Cetha yen nggoleki informasi sing wis disimpen ing hard drive, yen ora gagal, paling ora tugas sing efektif. Ing sisih liya, yen bedane cilik, sampeyan bisa nyetel sethithik ...
TL;DR - upaya kaping pindho kanggo ngomong babagan cara aneh kanggo ngoptimalake data nggunakake file JPEG, saiki ing wangun sing luwih bisa dingerteni.
Babagan bit lan prabΓ©dan
Yen sampeyan njupuk rong bagΓ©yan rampung acak data, ing rata-rata setengah saka bit padha ngemot pas. Pancen, antarane tata letak bisa kanggo saben pasangan ('00, 01, 10, 11β²), persis setengah duwe nilai padha, kabeh iku prasaja kene.
Nanging mesthi, yen kita mung njupuk loro file lan pas siji kanggo kaloro, banjur kita bakal kelangan siji. Yen kita nyimpen owah-owahan, kita mung bakal reinvent
Antarane apa lan apa bedane bisa diilangi? Yaiku, file anyar sing ditulis pangguna mung minangka urutan bit, sing ora bisa ditindakake kanthi mandiri. Banjur sampeyan mung kudu golek bit kuwi ing hard drive sing padha bisa diganti tanpa kudu nyimpen prabédan, supaya sampeyan bisa urip mundhut tanpa jalaran serius. Lan iku ndadekake pangertèn kanggo ngganti ora mung file ing FS dhewe, nanging sawetara informasi kurang sensitif nang. Nanging kang siji lan carane?
Metode pas
File kompres lossy teka kanggo ngluwari. Kabeh jpeg, mp3 lan liya-liyane, sanajan kompresi lossy, ngemot pirang-pirang bit sing bisa diganti kanthi aman. Bisa nggunakake teknik canggih sing ora bisa diowahi komponen ing macem-macem tahapan enkoding. Ngenteni. Techniques majeng ... modifikasi imperceptible ... siji dicokot menyang liyane ... iku meh kaya
Pancen, nanem informasi siji menyang liyane kaya cara dheweke ora ana liyane. Aku uga kesengsem karo imperceptibility saka owah-owahan sing digawe kanggo indra manungsa. Ing endi dalan sing beda-beda ana ing rahasia: tugas kita teka menyang pangguna ngetik informasi tambahan menyang hard drive; mung bakal cilaka dheweke. Dheweke bakal lali maneh.
Mulane, sanajan bisa digunakake, kita kudu nggawe sawetara modifikasi. Banjur aku bakal ngandhani lan nuduhake nggunakake conto salah sawijining metode sing ana lan format file sing umum.
Babagan jakal
Yen pancene remet, iku paling compressible ing donya. Kita, mesthi, ngomong babagan file JPEG. Ora mung ana macem-macem alat lan cara sing wis ana kanggo nglebokake data, nanging uga minangka format grafis sing paling populer ing planet iki.
Nanging, supaya ora melu breeding asu, sampeyan kudu mbatesi lapangan kegiatan ing file format iki. Ora ana sing seneng kothak monochrome sing katon amarga kompresi sing berlebihan, mula sampeyan kudu mbatesi sampeyan nggarap file sing wis dikompres, nyingkiri recoding. Luwih khusus, kanthi koefisien integer, sing tetep sawise operasi sing tanggung jawab kanggo mundhut data - DCT lan kuantisasi, sing ditampilake kanthi sampurna ing skema enkoding (matur nuwun kanggo wiki Perpustakaan Nasional Bauman):
Ana akeh cara kanggo ngoptimalake file jpeg. Ana optimasi lossless (jpegtran), ana optimasi "
F5
Kabeh kulawarga algoritma cocog karo kahanan kasebut, sing bisa sampeyan kenal
Owah-owahan kasebut mudhun kanggo nyuda nilai absolut saka koefisien kanthi siji ing kahanan tartamtu (yaiku, ora mesthi), sing ngidini sampeyan nggunakake F5 kanggo ngoptimalake panyimpenan data ing hard drive. Intine yaiku yen koefisien sawise owah-owahan kasebut bakal entuk luwih sithik sawise enkoding Huffman amarga distribusi statistik nilai ing JPEG, lan nol anyar bakal entuk bathi nalika ngodhe nggunakake RLE.
Modifikasi sing dibutuhake kanggo ngilangi bagean sing tanggung jawab kanggo rahasia (nyusun ulang tembung sandhi), sing ngirit sumber daya lan wektu eksekusi, lan nambah mekanisme kanggo nggarap akeh file tinimbang siji-sijine. Sing maca ora mungkin kasengsem ing proses pangowahan kanthi luwih rinci, mula ayo pindhah menyang katrangan babagan implementasine.
Teknologi tinggi
Kanggo nduduhake cara kerjane pendekatan iki, aku ngetrapake metode kasebut ing C murni lan nindakake sawetara optimasi ing babagan kecepatan lan memori eksekusi (sampeyan ora bisa mbayangake sepira bobote gambar kasebut tanpa kompresi, sanajan sadurunge DCT). Cross-platform digayuh nggunakake kombinasi perpustakaan
Implementasine kasedhiya ing wangun sarana console lan perpustakaan. Sing kasengsem bisa ngerteni luwih akeh babagan nggunakake sing terakhir ing readme ing repositori ing Github, link sing bakal daklampirake ing mburi kiriman.
Carane nggunakake?
kanthi ati-ati. Gambar sing digunakake kanggo kemasan dipilih kanthi nggoleki nggunakake ekspresi reguler ing direktori root sing diwenehake. Sawise rampung, file bisa dipindhah, diganti jeneng lan disalin ing bakal ing wates sawijining, ngganti file lan sistem operasi, etc. Nanging, sampeyan kudu ati-ati banget lan ora ngganti isi langsung ing sembarang cara. Mundhut regane malah siji bisa nggawe ora bisa mbalekake informasi.
Sawise rampung, sarana ninggalake file arsip khusus sing ngemot kabeh informasi sing dibutuhake kanggo mbongkar, kalebu data babagan gambar sing digunakake. Dhewe, bobote kira-kira sawetara kilobyte lan ora duwe pengaruh sing signifikan ing ruang disk sing dikuwasani.
Sampeyan bisa nganalisa kapasitas sing bisa nggunakake gendera '-a': './f5ar -a [folder telusuran] [ekspresi reguler sing kompatibel karo Perl]'. Pengepakan rampung kanthi printah './f5ar -p [folder telusuran] [ekspresi reguler sing kompatibel karo Perl] [file sing dikemas] [jeneng arsip]', lan mbongkar nganggo './f5ar -u [file arsip] [jeneng file sing wis pulih. ]' .
Demonstrasi karya
Kanggo nuduhake efektifitas metode kasebut, aku ngunggah koleksi 225 foto asu gratis saka layanan kasebut.
Urutane cukup prasaja:
$ 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/
Gambar kanggo penggemar
File sing ora dibungkus bisa lan kudu diwaca:
Nalika sampeyan bisa ndeleng, saka asli 633 + 36 == 669 megabyte data ing hard drive, kita teka luwih penake 551. prabΓ©dan radikal kuwi diterangake dening nyuda ing Nilai saka koefisien, kang mengaruhi sing. kompresi lossless sakteruse: nyuda siji-siji bisa gampang " ngethok saperangan bita saka file final. Nanging, iki isih mundhut data, sanajan cilik banget, sing kudu sampeyan lakoni.
Untunge, dheweke pancen ora katon ing mripat. Ing spoiler (amarga habrastorage ora bisa nangani file gedhe), maca bisa ngevaluasi prabΓ©dan loro dening mripat lan kakiyatan, dijupuk dening subtracting nilai komponen diganti saka asline:
Tinimbang kesimpulan
Ngelingi kabeh kesulitan kasebut, tuku hard drive utawa ngunggah kabeh menyang awan bisa uga katon kaya solusi sing luwih gampang kanggo masalah kasebut. Nanging sanajan kita saiki urip ing wektu sing apik banget, ora ana jaminan yen sesuk isih bisa online lan ngunggah kabeh data ekstra ing endi wae. Utawa menyang toko lan tuku hard drive ewu terabyte liyane. Nanging sampeyan bisa tansah nggunakake omah sing wis ana.
->
Source: www.habr.com