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...
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
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
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.
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ə):
jpeg fayllarını optimallaşdırmaq üçün bir çox mümkün üsul var. İtkisiz optimallaşdırma (jpegtran) var, optimallaşdırma var "
F5
Bütün alqoritmlər ailəsi tanış ola biləcəyiniz bu şərtlərə uyğundur
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
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.
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
Paketdən çıxarılan fayl oxuna bilər və oxunmalıdır:
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:
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.
->
Mənbə: www.habr.com