Sabit disk sahəsinə qənaət etmək üçün qəribə bir üsul haqqında

Başqa bir istifadəçi sabit diskə yeni bir məlumat yazmaq istəyir, lakin bunun üçün kifayət qədər boş yer yoxdur. Mən də heç nəyi silmək istəmirəm, çünki “hər şey çox vacib və zəruridir”. Və bununla nə etməliyik?

Heç kimin bu problemi yoxdur. Sərt disklərimizdə terabaytlarla məlumat var və bu məbləğ azalmağa meylli deyil. Amma nə qədər unikaldır? Nəhayət, bütün fayllar yalnız müəyyən uzunluqdakı bit dəstləridir və çox güman ki, yenisi artıq saxlanılandan çox da fərqlənmir.

Aydındır ki, artıq sabit diskdə saxlanılan məlumatların axtarışı uğursuzluq deyilsə, heç olmasa təsirli bir iş deyil. Digər tərəfdən, fərq azdırsa, onu bir az tənzimləyə bilərsiniz...

Sabit disk sahəsinə qənaət etmək üçün qəribə bir üsul haqqında

TL;DR - JPEG fayllarından istifadə edərək məlumatların optimallaşdırılmasının qəribə üsulu haqqında danışmaq üçün ikinci cəhd, indi daha başa düşülən formada.

Bitlər və fərqlər haqqında

Əgər iki tamamilə təsadüfi məlumat parçası götürsəniz, onda onların ehtiva etdiyi bitlərin orta hesabla yarısı üst-üstə düşür. Həqiqətən də, hər bir cüt üçün (’00, 01, 10, 11′) mümkün planlar arasında tam yarısı eyni dəyərlərə malikdir, burada hər şey sadədir.

Ancaq təbii ki, sadəcə iki fayl götürsək və birini ikinciyə sığdırsaq, onlardan birini itirəcəyik. Dəyişiklikləri yadda saxlasaq, sadəcə olaraq yenidən kəşf edəcəyik delta kodlaşdırması, adətən eyni məqsədlər üçün istifadə edilməsə də, bizsiz mükəmməl şəkildə mövcuddur. Biz daha kiçik bir ardıcıllığı daha böyük birinə yerləşdirməyə cəhd edə bilərik, lakin buna baxmayaraq, hər şeylə ehtiyatsızlıqla istifadə etsək, məlumatın kritik seqmentlərini itirmək riskimiz var.

Nə və nə arasında fərq aradan qaldırıla bilər? Yaxşı, yəni istifadəçi tərəfindən yazılmış yeni fayl sadəcə bitlərin ardıcıllığıdır, onunla öz-özünə heç bir şey edə bilmərik. Onda sadəcə sabit diskdə elə bitləri tapmaq lazımdır ki, onlar fərqi saxlamadan dəyişdirilə bilsin ki, onların itkisindən ciddi nəticələr olmadan sağ çıxa biləsiniz. Və yalnız FS-nin özündə olan faylı deyil, onun içindəki bəzi daha az həssas məlumatları dəyişdirməyin mənası var. Bəs hansı və necə?

Quraşdırma üsulları

İtkin sıxılmış fayllar köməyə gəlir. Bütün bu jpeglər, mp3lər və başqaları, itkili sıxılma olsa da, təhlükəsiz dəyişdirilə bilən bir dəstə bit ehtiva edir. Kodlaşdırmanın müxtəlif mərhələlərində komponentlərini hiss olunmayacaq şəkildə dəyişdirən qabaqcıl üsullardan istifadə etmək mümkündür. Gözləmək. Qabaqcıl texnikalar... hiss olunmayan modifikasiya... bir bit digərinə... demək olar ki, belədir steqanoqrafiya!

Həqiqətən də, bir məlumatı digərinə daxil etmək onun metodlarını xatırladır. İnsan hisslərində edilən dəyişikliklərin hiss olunmazlığı məni də heyran edir. Yolların ayrıldığı yerdə məxfilik var: bizim vəzifəmiz istifadəçinin sabit diskinə əlavə məlumat daxil etməsindən ibarətdir; bu, yalnız ona zərər verəcəkdir. Yenə unudacaq.

Ona görə də onlardan istifadə edə bilsək də, bəzi dəyişikliklər etməliyik. Və sonra mövcud üsullardan birinin və ümumi fayl formatının nümunəsindən istifadə edərək onlara izah edəcəyəm və göstərəcəyəm.

Çaqqallar haqqında

Əgər onu həqiqətən sıxırsınızsa, deməli bu, dünyada ən sıxıla bilən şeydir. Əlbəttə ki, JPEG fayllarından danışırıq. Məlumatların daxil edilməsi üçün təkcə tonlarla alətlər və mövcud üsullar deyil, həm də bu planetdə ən populyar qrafik formatıdır.

Sabit disk sahəsinə qənaət etmək üçün qəribə bir üsul haqqında

Bununla belə, it yetişdirmə ilə məşğul olmamaq üçün bu formatdakı fayllarda fəaliyyət sahənizi məhdudlaşdırmalısınız. Həddindən artıq sıxılma səbəbiylə görünən monoxrom kvadratları heç kim sevmir, buna görə də artıq sıxılmış bir faylla işləmək üçün özünüzü məhdudlaşdırmalısınız, yenidən kodlaşdırmadan qaçınmaq. Daha dəqiq desək, məlumat itkisinə cavabdeh olan əməliyyatlardan sonra qalan tam əmsallarla - kodlaşdırma sxemində mükəmməl şəkildə əks olunan DCT və kvantlaşdırma (Bauman Milli Kitabxanasının wiki sayəsində):
Sabit disk sahəsinə qənaət etmək üçün qəribə bir üsul haqqında

jpeg fayllarını optimallaşdırmaq üçün bir çox mümkün üsul var. İtkisiz optimallaşdırma (jpegtran) var, optimallaşdırma var "itki yoxdur", əslində başqa bir şeyə töhfə verir, lakin biz onlara əhəmiyyət vermirik. Axı, istifadəçi boş disk yerini artırmaq üçün bir məlumatı digərinə yerləşdirməyə hazırdırsa, o, ya şəkillərini çoxdan optimallaşdırıb, ya da keyfiyyətini itirmək qorxusundan ümumiyyətlə bunu etmək istəmir.

F5

Bütün alqoritmlər ailəsi tanış ola biləcəyiniz bu şərtlərə uyğundur bu yaxşı təqdimatda. Onlardan ən təkmil olanı alqoritmdir F5 Andreas Westfeld tərəfindən, parlaqlıq komponentinin əmsalları ilə işləyir, çünki insan gözü onun dəyişikliklərinə ən az həssasdır. Üstəlik, o, matris kodlaşdırmasına əsaslanan yerləşdirmə texnikasından istifadə edir ki, bu da eyni miqdarda məlumatı daxil edərkən daha az dəyişiklik etməyə imkan verir, istifadə olunan konteynerin ölçüsü nə qədər böyükdürsə.

Dəyişikliklərin özləri müəyyən şərtlərdə (yəni həmişə deyil) əmsalların mütləq dəyərini bir azaldır, bu da sabit diskinizdə məlumatların saxlanmasını optimallaşdırmaq üçün F5-dən istifadə etməyə imkan verir. Məsələ burasındadır ki, belə bir dəyişiklikdən sonra əmsal JPEG-də dəyərlərin statistik paylanması səbəbindən Huffman kodlaşdırmasından sonra çox güman ki, daha az bit tutacaq və yeni sıfırlar RLE-dən istifadə edərək onları kodlaşdırarkən qazanc verəcəkdir.

Lazımi dəyişikliklər məxfiliyə cavabdeh olan hissənin (parolun dəyişdirilməsi) aradan qaldırılmasına, qaynaqlara və icra vaxtına qənaət etməyə və birdən-birə bir çox faylla işləmək üçün bir mexanizm əlavə etməyə qədər qaynar. Oxucu çətin ki, dəyişiklik prosesi ilə daha ətraflı maraqlansın, ona görə də tətbiqin təsvirinə keçək.

Yüksək texnologiya

Bu yanaşmanın necə işlədiyini nümayiş etdirmək üçün mən üsulu təmiz C-də tətbiq etdim və həm icra sürəti, həm də yaddaş baxımından bir sıra optimallaşdırmalar həyata keçirdim (siz bu şəkillərin sıxılmadan, hətta DCT-dən əvvəl də nə qədər çəkdiyini təsəvvür edə bilməzsiniz). Çarpaz platforma kitabxanaların birləşməsindən istifadə etməklə əldə edilmişdir libjpeg, pcre и kiçikdir, buna görə onlara təşəkkür edirik. Bütün bunlar "yapmaq" tərəfindən bir araya gətirilir, buna görə də Windows istifadəçiləri qiymətləndirmə üçün özləri üçün bəzi Cygwin quraşdırmaq və ya Visual Studio və kitabxanalarla özləri məşğul olmaq istəyirlər.

Tətbiq konsol yardım proqramı və kitabxana şəklində mövcuddur. Maraqlananlar sonuncunun istifadəsi haqqında daha çox məlumatı yazının sonunda əlavə edəcəyim linki Github-dakı repozitoriyada oxuya bilərlər.

Necə istifadə etmək olar?

Diqqətlə. Qablaşdırma üçün istifadə edilən şəkillər verilmiş kök kataloqda müntəzəm ifadədən istifadə etməklə axtarış yolu ilə seçilir. Tamamlandıqdan sonra, faylları öz sərhədləri daxilində köçürə, adını dəyişdirə və kopyalaya, faylı və əməliyyat sistemlərini dəyişdirə və s. Hətta bir bitin dəyərini itirmək məlumatı bərpa etməyi qeyri-mümkün edə bilər.

Tamamlandıqdan sonra yardım proqramı istifadə olunan şəkillər haqqında məlumatlar da daxil olmaqla, qablaşdırmadan çıxarmaq üçün lazım olan bütün məlumatları ehtiva edən xüsusi arxiv faylını tərk edir. Öz-özünə, təxminən bir neçə kilobayt ağırlığında və işğal edilmiş disk sahəsinə əhəmiyyətli təsir göstərmir.

Siz '-a' bayrağından istifadə edərək mümkün tutumu təhlil edə bilərsiniz: './f5ar -a [axtarış qovluğu] [Perl-uyğun müntəzəm ifadə]'. Qablaşdırma './f5ar -p [axtarış qovluğu] [Perl-uyğun müntəzəm ifadə] [paketlənmiş fayl] [arxiv adı]' əmri ilə və './f5ar -u [arxiv faylı] [bərpa edilmiş fayl adı] ilə qablaşdırma aparılır. ]' .

Əməyin nümayişi

Metodun effektivliyini göstərmək üçün xidmətdən itlərin 225 tamamilə pulsuz foto kolleksiyasını yüklədim. Unsplash və sənədlərdə ikinci cildin 45 metrlik böyük bir pdf tapdı Proqramlaşdırma sənəti Knuta.

Ardıcıllıq olduqca sadədir:

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

Azarkeşlər üçün ekran görüntüləri

Sabit disk sahəsinə qənaət etmək üçün qəribə bir üsul haqqında

Paketdən çıxarılan fayl oxuna bilər və oxunmalıdır:

Sabit disk sahəsinə qənaət etmək üçün qəribə bir üsul haqqında

Gördüyünüz kimi, sabit diskdəki orijinal 633 + 36 == 669 meqabayt məlumatdan daha xoş 551-ə gəldik. Belə bir köklü fərq, onların dəyərinə təsir edən əmsalların dəyərlərinin azalması ilə izah olunur. sonrakı itkisiz sıxılma: bir-bir azaldılması asanlıqla “ son fayldan bir neçə baytı kəsə bilər. Bununla belə, bu, çox kiçik olsa da, yenə də məlumat itkisidir, buna dözməli olacaqsınız.

Xoşbəxtlikdən, onlar göz üçün tamamilə görünməzdir. Spoiler altında (habrastorage böyük faylları idarə edə bilmədiyi üçün) oxucu həm göz, həm də dəyişdirilmiş komponentin dəyərlərini orijinaldan çıxarmaqla əldə edilən fərqi qiymətləndirə bilər: orijinal, daxilində məlumatla, fərq (rəng nə qədər tutqun olarsa, blokdakı fərq bir o qədər az olar).

Bunun əvəzinə bir nəticəyə

Bütün bu çətinlikləri nəzərə alsaq, sərt disk almaq və ya hər şeyi buludlara yükləmək problemin daha sadə həlli kimi görünə bilər. Ancaq indi belə gözəl bir zamanda yaşasaq da, sabah hələ də internetə girmək və bütün əlavə məlumatlarınızı harasa yükləmək mümkün olacağına heç bir zəmanət yoxdur. Və ya mağazaya gedin və özünüzə daha min terabaytlıq sərt disk alın. Ancaq həmişə mövcud evlərdən istifadə edə bilərsiniz.

-> Github

Mənbə: www.habr.com

Добавить комментарий