දෘඪ තැටියේ ඉඩ ඉතිරි කර ගැනීම සඳහා අමුතු ක්රමයක් ගැන

තවත් පරිශීලකයෙකුට දෘඪ තැටියට නව දත්ත කැබැල්ලක් ලිවීමට අවශ්‍ය වේ, නමුත් ඔහුට මෙය කිරීමට ප්‍රමාණවත් ඉඩක් නොමැත. “සියල්ල ඉතා වැදගත් සහ අවශ්‍ය” බැවින් මට කිසිවක් මකා දැමීමට අවශ්‍ය නැත. සහ අප එයට කළ යුත්තේ කුමක්ද?

කාටවත් මේ ප්‍රශ්නය නැහැ. අපගේ දෘඪ තැටි මත ටෙරාබයිට් තොරතුරු ඇති අතර, මෙම ප්රමාණය අඩු වීමට නැඹුරු නොවේ. නමුත් එය කෙතරම් අද්විතීයද? අවසානයේදී, සියලුම ලිපිගොනු නිශ්චිත දිගකින් යුත් බිටු කට්ටලයක් වන අතර, බොහෝ විට, නව එක දැනටමත් ගබඩා කර ඇති එකට වඩා වෙනස් නොවේ.

දෘඪ තැටියක දැනටමත් ගබඩා කර ඇති තොරතුරු කැබලි සෙවීම අසාර්ථක නොවේ නම්, අවම වශයෙන් ඵලදායී කාර්යයක් නොවන බව පැහැදිලිය. අනෙක් අතට, වෙනස කුඩා නම්, ඔබට එය ටිකක් සකස් කළ හැකිය ...

දෘඪ තැටියේ ඉඩ ඉතිරි කර ගැනීම සඳහා අමුතු ක්රමයක් ගැන

TL;DR - JPEG ගොනු භාවිතයෙන් දත්ත ප්‍රශස්ත කිරීමේ අමුතු ක්‍රමයක් ගැන කතා කිරීමේ දෙවන උත්සාහය, දැන් වඩාත් තේරුම් ගත හැකි ආකාරයෙන්.

බිටු සහ වෙනස ගැන

ඔබ සම්පූර්ණයෙන්ම අහඹු දත්ත කොටස් දෙකක් ගන්නේ නම්, සාමාන්‍යයෙන් ඒවායේ අඩංගු බිටු වලින් අඩක් සමපාත වේ. ඇත්ත වශයෙන්ම, එක් එක් යුගල සඳහා විය හැකි පිරිසැලසුම් අතර ('00, 01, 10, 11′), හරියටම හරි අඩකට එකම අගයන් ඇත, මෙහි සියල්ල සරල ය.

නමුත් ඇත්ත වශයෙන්ම, අපි ලිපිගොනු දෙකක් ගෙන එකක් තත්පරයට ගැලපේ නම්, ඉන් එකක් අපට අහිමි වනු ඇත. අපි වෙනස්කම් සුරැකුවහොත්, අපි සරලව නැවත සොයා ගනිමු ඩෙල්ටා කේතනය, එය සාමාන්‍යයෙන් එකම අරමුණු සඳහා භාවිතා නොකළද, අප නොමැතිව පරිපූර්ණ ලෙස පවතී. අපට කුඩා අනුපිළිවෙලක් විශාල එකකට කාවැද්දීමට උත්සාහ කළ හැකිය, නමුත් එසේ වුවද, අපි එය සෑම දෙයක් සමඟම නොසැලකිලිමත් ලෙස භාවිතා කළහොත් තීරණාත්මක දත්ත කොටස් අහිමි වීමේ අවදානමක් ඇත.

කුමක් සහ කුමක් අතර වෙනස ඉවත් කළ හැකිද? හොඳයි, එනම්, පරිශීලකයා විසින් ලියන ලද නව ගොනුවක් යනු බිටු අනුපිළිවෙලක් පමණි, එය අපට තනිවම කළ නොහැක. එවිට ඔබට බරපතල ප්රතිවිපාකවලින් තොරව ඔවුන්ගේ පාඩුව බේරීමට හැකි වන පරිදි, වෙනස ගබඩා කිරීමකින් තොරව වෙනස් කළ හැකි දෘඪ තැටියේ එවැනි බිටු සොයා ගැනීමට අවශ්ය වේ. එෆ්එස් හි ඇති ගොනුව පමණක් නොව එහි ඇති අඩු සංවේදී තොරතුරු වෙනස් කිරීම අර්ථවත් කරයි. නමුත් කුමන එකක් සහ කෙසේද?

සවි කිරීමේ ක්රම

අහිමි වූ සම්පීඩිත ගොනු ගලවා ගැනීමට පැමිණේ. මෙම සියලු jpegs, mp3s සහ අනෙකුත්, පාඩු සම්පීඩනය වුවද, ආරක්ෂිතව වෙනස් කළ හැකි බිටු පොකුරක් අඩංගු වේ. කේතනය කිරීමේ විවිධ අවස්ථා වලදී ඒවායේ සංරචක නොපෙනෙන ලෙස වෙනස් කරන උසස් තාක්ෂණික ක්‍රම භාවිතා කළ හැකිය. ඉන්න. දියුණු ශිල්පීය ක්‍රම... නොපෙනෙන වෙනස් කිරීම්... එක ටිකක් තව එකකට... ඒක වාගේ steganography!

ඇත්ත වශයෙන්ම, එක් තොරතුරක් තවත් එකකට කාවැද්දීම අන් කිසිවක් මෙන් ඇගේ ක්‍රම සිහිගන්වයි. මනුෂ්‍ය ඉන්ද්‍රියයන්ට කරන ලද වෙනස්කම්වල නොපෙනෙන බව ද මම පැහැදුණෙමි. මාර්ග අපසරනය වන තැන රහසිගතව පවතී: අපගේ කාර්යය පරිශීලකයාට ඔහුගේ දෘඪ තැටියට අමතර තොරතුරු ඇතුළත් කිරීම වෙත පැමිණේ; එය ඔහුට හානි කරයි. ඔහුට නැවත අමතක වනු ඇත.

එමනිසා, අපට ඒවා භාවිතා කළ හැකි වුවද, අපි යම් යම් වෙනස් කිරීම් සිදු කළ යුතුය. ඉන්පසු මම දැනට පවතින එක් ක්‍රමයක් සහ පොදු ගොනු ආකෘතියක උදාහරණය භාවිතා කර ඒවා පෙන්වන්නම්.

හිවලුන් ගැන

ඔබ එය ඇත්තටම මිරිකන්නේ නම්, එය ලෝකයේ වඩාත්ම සංකෝචනය වන දෙයයි. ඇත්ත වශයෙන්ම, අපි JPEG ගොනු ගැන කතා කරමු. එයට දත්ත කාවැද්දීම සඳහා මෙවලම් ටොන් ගණනක් සහ පවතින ක්‍රම තිබේ පමණක් නොව, එය මෙම ග්‍රහලෝකයේ වඩාත්ම ජනප්‍රිය ග්‍රැෆික් ආකෘතියයි.

දෘඪ තැටියේ ඉඩ ඉතිරි කර ගැනීම සඳහා අමුතු ක්රමයක් ගැන

කෙසේ වෙතත්, සුනඛ අභිජනනයේ නිරත නොවීම සඳහා, මෙම ආකෘතියේ ගොනු තුළ ඔබේ ක්‍රියාකාරකම් ක්ෂේත්‍රය සීමා කළ යුතුය. අධික සම්පීඩනය හේතුවෙන් දිස්වන ඒකවර්ණ වර්ග වලට කිසිවෙකු කැමති නැත, එබැවින් ඔබ දැනටමත් සම්පීඩිත ගොනුවක් සමඟ වැඩ කිරීමට සීමා විය යුතුය, නැවත කේතනය කිරීම වැළැක්වීම. වඩාත් නිශ්චිතව, දත්ත නැතිවීම සඳහා වගකිව යුතු මෙහෙයුම් වලින් පසුව පවතින පූර්ණ සංගුණක සමඟ - DCT සහ ප්‍රමාණකරණය, එය කේතීකරණ ක්‍රමයේ පරිපූර්ණ ලෙස ප්‍රදර්ශනය කෙරේ (Bauman ජාතික පුස්තකාලයේ විකියට ස්තූතියි):
දෘඪ තැටියේ ඉඩ ඉතිරි කර ගැනීම සඳහා අමුතු ක්රමයක් ගැන

jpeg ගොනු ප්‍රශස්ත කිරීම සඳහා බොහෝ ක්‍රම තිබේ. පාඩු රහිත ප්‍රශස්තකරණයක් ඇත (jpegtran), ප්‍රශස්තකරණයක් ඇත "පාඩුවක් නැත", එය ඇත්ත වශයෙන්ම වෙනත් දෙයකට දායක වේ, නමුත් අපි ඔවුන් ගැන තැකීමක් නොකරමු. සියල්ලට පසු, නිදහස් තැටි ඉඩ වැඩි කිරීම සඳහා පරිශීලකයා එක් තොරතුරක් තවත් එකකට කාවැද්දීමට සූදානම් නම්, ඔහු එක්කෝ බොහෝ කලකට පෙර ඔහුගේ පින්තූර ප්‍රශස්ත කර ඇත, නැතහොත් ගුණාත්මකභාවය නැති වේ යැයි බියෙන් මෙය කිරීමට කිසිසේත් කැමති නැත.

F5

සමස්ත ඇල්ගොරිතම පවුලක් මෙම කොන්දේසි වලට ගැලපේ, ඔබට හුරුපුරුදු විය හැකිය මෙම හොඳ ඉදිරිපත් කිරීම තුළ. ඒවායින් වඩාත්ම දියුණු ඇල්ගොරිතම වේ F5 Andreas Westfeld විසින්, දීප්තියේ සංරචකයේ සංගුණක සමඟ වැඩ කිරීම, මිනිස් ඇස එහි වෙනස්කම් වලට අවම වශයෙන් සංවේදී වන බැවින්. එපමනක් නොව, එය matrix කේතනය මත පදනම් වූ කාවැද්දීමේ තාක්‍ෂණයක් භාවිතා කරයි, එමඟින් එකම තොරතුරු ප්‍රමාණයක් කාවැද්දීමේදී අඩු වෙනස්කම් කිරීමට හැකි වේ, භාවිතා කරන බහාලුම් ප්‍රමාණය විශාල වේ.

යම් යම් කොන්දේසි යටතේ (එනම් සෑම විටම නොවේ) සංගුණකවල නිරපේක්ෂ අගය එකකින් අඩු කිරීම දක්වා වෙනස් කිරීම් පහත වැටේ, එමඟින් ඔබේ දෘඪ තැටියේ දත්ත ගබඩා කිරීම ප්‍රශස්ත කිරීමට F5 භාවිතා කිරීමට ඔබට ඉඩ සලසයි. කාරණය නම්, JPEG හි අගයන්හි සංඛ්‍යානමය ව්‍යාප්තිය හේතුවෙන් එවැනි වෙනසකින් පසු සංගුණකය බොහෝ විට හෆ්මන් කේතීකරණයෙන් පසු බිටු අඩු ප්‍රමාණයක් ලබා ගන්නා අතර RLE භාවිතයෙන් ඒවා කේතනය කිරීමේදී නව ශුන්‍යයන් ලාභයක් ලබා දෙනු ඇත.

සම්පත් සහ ක්‍රියාත්මක කිරීමේ කාලය ඉතිරි කරන රහස්‍යභාවය (මුරපද ප්‍රතිසංවිධානය) සඳහා වගකිව යුතු කොටස ඉවත් කිරීම සහ වරකට එකක් වෙනුවට බොහෝ ලිපිගොනු සමඟ වැඩ කිරීමේ යාන්ත්‍රණයක් එකතු කිරීම සඳහා අවශ්‍ය වෙනස් කිරීම් පහත වැටේ. පාඨකයා වඩාත් විස්තරාත්මකව වෙනස් කිරීමේ ක්රියාවලිය ගැන උනන්දු වීමට ඉඩක් නැත, එබැවින් අපි ක්රියාත්මක කිරීම පිළිබඳ විස්තරයක් වෙත යමු.

උසස් තාක්ෂණයේ

මෙම ප්‍රවේශය ක්‍රියාත්මක වන ආකාරය නිරූපණය කිරීම සඳහා, මම ක්‍රමය පිරිසිදු C වලින් ක්‍රියාත්මක කර ක්‍රියාත්මක කිරීමේ වේගය සහ මතකය යන දෙඅංශයෙන්ම ප්‍රශස්තිකරණයන් ගණනාවක් සිදු කළෙමි (DCT ට පෙර පවා මෙම පින්තූර සම්පීඩනයකින් තොරව බර කොපමණ දැයි ඔබට සිතාගත නොහැක). පුස්තකාලවල එකතුවක් භාවිතයෙන් ලබා ගත් හරස් වේදිකාව libjpeg, pcre и tinydir, ඒ සඳහා අපි ඔවුන්ට ස්තුතිවන්ත වෙනවා. මේ සියල්ල 'make' මගින් එකට එකතු කර ඇත, එබැවින් Windows පරිශීලකයින්ට ඇගයීම සඳහා Cygwin කිහිපයක් ස්ථාපනය කිරීමට අවශ්‍ය වේ, නැතහොත් Visual Studio සහ libraries සමඟ තමන්ම ගනුදෙනු කරන්න.

ක්රියාත්මක කිරීම කොන්සෝල උපයෝගිතා සහ පුස්තකාල ආකාරයෙන් ලබා ගත හැකිය. උනන්දුවක් දක්වන අයට Github හි ගබඩාවේ ඇති readme හි දෙවැන්න භාවිතා කිරීම ගැන වැඩි විස්තර දැන ගත හැකිය, මම ලිපිය අවසානයේ අමුණන සබැඳිය.

භාවිතා කරන්නේ කෙසේද?

පරිස්සමෙන්. ලබා දී ඇති මූල නාමාවලියෙහි සාමාන්‍ය ප්‍රකාශනයක් භාවිතයෙන් සෙවීමෙන් ඇසුරුම් සඳහා භාවිතා කරන රූප තෝරා ගනු ලැබේ. අවසන් වූ පසු, ගොනු එහි සීමාවන් තුළ අභිමතය පරිදි මාරු කිරීම, නැවත නම් කිරීම සහ පිටපත් කිරීම, ගොනු සහ මෙහෙයුම් පද්ධති වෙනස් කිරීම ආදිය කළ හැකිය. කෙසේ වෙතත්, ඔබ අතිශයින්ම පරෙස්සම් විය යුතු අතර කිසිදු ආකාරයකින් ක්ෂණික අන්තර්ගතය වෙනස් නොකළ යුතුය. එක් බිට් එකක වටිනාකමක් නැතිවීම තොරතුරු නැවත ලබා ගැනීමට නොහැකි විය හැක.

අවසන් වූ පසු, උපයෝගීතාව විසින් භාවිතා කරන ලද පින්තූර පිළිබඳ දත්ත ඇතුළුව, ඉවත් කිරීම සඳහා අවශ්ය සියලු තොරතුරු අඩංගු විශේෂ සංරක්ෂිත ගොනුවක් තබයි. එය විසින්ම, එය කිලෝබයිට් කිහිපයක් පමණ බරින් යුක්ත වන අතර වාඩිලාගෙන සිටින තැටි අවකාශයට සැලකිය යුතු බලපෑමක් ඇති නොකරයි.

ඔබට '-a' ධජය භාවිතයෙන් හැකි ධාරිතාව විශ්ලේෂණය කළ හැක: './f5ar -a [සෙවුම් ෆෝල්ඩරය] [Perl-අනුකූල නිත්‍ය ප්‍රකාශනය]'. ඇසුරුම් කිරීම සිදු කරනු ලබන්නේ './f5ar -p [සෙවුම් ෆෝල්ඩරය] [Perl-අනුකූල නිත්‍ය ප්‍රකාශනය] [ඇසුරුම් කළ ගොනුව] [සංරක්ෂිත නාමය]', සහ './f5ar -u [සංරක්ෂිත ගොනුව] [ප්‍රතිසාධන ගොනු නාමය] සමඟින් ඇසුරුම් කිරීම සිදු කරයි. ]'

වැඩ විදහා දැක්වීම

ක්‍රමයේ සඵලතාවය පෙන්වීමට, මම සේවාවෙන් සුනඛයන්ගේ සම්පූර්ණයෙන්ම නොමිලේ ඡායාරූප 225ක එකතුවක් උඩුගත කළෙමි. නොපෙනී දෙවන වෙළුමේ මීටර් 45 ක විශාල pdf ලේඛනවල සොයා ගන්නා ලදී වැඩසටහන් කලාව Knuta.

අනුපිළිවෙල තරමක් සරල ය:

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

රසිකයින් සඳහා තිරපිටපත්

දෘඪ තැටියේ ඉඩ ඉතිරි කර ගැනීම සඳහා අමුතු ක්රමයක් ගැන

ඇසුරුම් නොකළ ගොනුව කියවිය හැකි සහ තවමත් කියවිය යුතුය:

දෘඪ තැටියේ ඉඩ ඉතිරි කර ගැනීම සඳහා අමුතු ක්රමයක් ගැන

ඔබට පෙනෙන පරිදි, දෘඪ තැටියේ මුල් 633 + 36 == මෙගාබයිට් 669 දත්ත වලින්, අපි වඩාත් ප්රසන්න 551 වෙත පැමිණියෙමු. එවැනි රැඩිකල් වෙනසක් සංගුණකවල අගයන් අඩු වීමෙන් පැහැදිලි කර ඇති අතර එය ඒවායේ බලපෑමට බලපායි. පසුකාලීන පාඩු රහිත සම්පීඩනය: එකින් එක අඩු කිරීමෙන් පහසුවෙන් අවසන් ගොනුවෙන් බයිට් කිහිපයක් කපා හැරිය හැක. කෙසේ වෙතත්, මෙය තවමත් දත්ත අලාභයක් වන අතර, ඉතා කුඩා එකක් වුවද, ඔබට ඉවසා සිටීමට සිදුවනු ඇත.

වාසනාවකට මෙන්, ඒවා සම්පූර්ණයෙන්ම ඇසට නොපෙනේ. ස්පොයිලර් යටතේ (හබ්‍රාස්ටෝරේජ් විශාල ලිපිගොනු හැසිරවිය නොහැකි බැවින්), පාඨකයාට ඇසින් සහ ඒවායේ තීව්‍රතාවයෙන් වෙනස තක්සේරු කළ හැකිය, වෙනස් කළ සංරචකයේ අගයන් මුල් පිටපතෙන් අඩු කිරීමෙන් ලබා ගනී: මුල්, ඇතුළත තොරතුරු සමඟ, වෙනස (අඳුරු වර්ණය, බ්ලොක් එකේ වෙනස කුඩා වේ).

ඒ වෙනුවට අවසාන කාල පරිච්ඡේදය

මෙම සියලු දුෂ්කරතා සැලකිල්ලට ගනිමින්, දෘඪ තැටියක් මිලදී ගැනීම හෝ වලාකුළට සියල්ල උඩුගත කිරීම ගැටලුවට වඩා සරල විසඳුමක් ලෙස පෙනේ. නමුත් අප දැන් ජීවත් වන්නේ එවැනි අපූරු කාලයක වුවද, හෙට තවමත් අන්තර්ජාලයට ගොස් ඔබගේ අමතර දත්ත සියල්ල කොහේ හෝ උඩුගත කිරීමට හැකි වනු ඇති බවට සහතිකයක් නොමැත. නැතහොත් ගබඩාවට ගොස් තවත් ටෙරාබයිට් දහසක් දෘඪ තැටියක් මිලදී ගන්න. නමුත් ඔබට සෑම විටම පවතින නිවාස භාවිතා කළ හැකිය.

-> GitHub

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න