يريد مستخدم آخر كتابة جزء جديد من البيانات على القرص الثابت ، ولكن ليس لديه مساحة حرة كافية لذلك. لا أريد حذف أي شيء أيضًا ، لأن "كل شيء مهم للغاية وضروري". وماذا سنفعل به؟
ليس لديه مشكلة من هذا القبيل. تيرابايت المعلومات الموجودة على محركات الأقراص الصلبة لدينا ، وهذا المبلغ لا يميل إلى الانخفاض. ولكن كيف هي فريدة من نوعها؟ في النهاية ، بعد كل شيء ، كل الملفات هي مجرد مجموعات من البتات بطول معين ، والأرجح أن الملف الجديد لا يختلف كثيرًا عن الملف المخزن بالفعل.
من الواضح أن البحث عن معلومات مخزنة بالفعل على القرص الثابت هي مهمة ، إن لم تكن فاشلة ، فهي ليست فعالة على الأقل. من ناحية أخرى ، لأنه إذا كان الفرق صغيرًا ، فيمكنك أن تتناسب قليلاً ...

TL ؛ DR - المحاولة الثانية للحديث عن طريقة غريبة لتحسين البيانات باستخدام ملفات JPEG ، الآن في شكل أكثر قابلية للفهم.
عن البتات والفرق
إذا أخذنا جزأين عشوائيًا تمامًا من البيانات ، فسيصادف في المتوسط نصف البتات المضمنة فيها. في الواقع ، من بين المخططات المحتملة لكل زوج ('00 ، 01 ، 10 ، 11 ') ، بالضبط نصف له نفس القيم ، كل شيء بسيط هنا.
لكن بالطبع ، إذا أخذنا ملفين فقط وضمنا ملفًا واحدًا تحت الثانية ، فسوف نفقد أحدهما. إذا احتفظنا بالتغييرات ، فسنقوم ببساطة بإعادة اختراع تشفير دلتا ، وهو موجود بدوننا تمامًا ، على الرغم من أنه لا يستخدم عادةً لنفس الغرض. يمكنك محاولة تضمين تسلسل أصغر في تسلسل أكبر ، ولكن مع ذلك ، فإننا نخاطر بفقد شرائح البيانات الهامة عند استخدامها بتهور مع كل شيء.
بين ماذا وماذا إذن يمكن القضاء على الفرق؟ حسنًا ، أي أن الملف الجديد الذي سجله المستخدم هو مجرد سلسلة من البتات التي لا يمكننا القيام بأي شيء بمفرده. ثم تحتاج فقط إلى العثور على هذه البتات على القرص الصلب بحيث يمكن تغييرها دون الحاجة إلى تخزين الفرق ، بحيث يمكنك البقاء على قيد الحياة من خسائرها دون عواقب وخيمة. نعم ، ومن المنطقي تغيير ليس فقط الملف نفسه على FS ، ولكن بعض المعلومات الأقل حساسية داخله. ولكن أي واحد وكيف؟
طرق تناسب
تأتي الملفات المضغوطة المفقودة في عملية الإنقاذ. كل هذه jpeg و mp3 وغيرها ، على الرغم من أنها ضغط ضياع ، تحتوي على مجموعة من البتات المتاحة للتغيير الآمن. يمكنك استخدام التقنيات المتقدمة ، وتعديل مكوناتها في مجالات مختلفة من الترميز. انتظر لحظة التقنيات المتقدمة ... التعديل غير الواضح ... بعض البتات للآخرين ... نعم إنه إخفاء المعلومات تقريبًا!
في الواقع ، إن تضمين معلومات في أخرى يشبه أساليبها بغض النظر عن ماذا. كما أنه يخفي اختفاء التغييرات التي تم إجراؤها على حواس الإنسان. هذا هو المكان الذي تتباعد فيه المسارات - إنه سر: مهمتنا هي إضافة معلومات إضافية إلى القرص الصلب للمستخدم ، إنها ستؤذيه فقط. انسى اكثر
لذلك ، على الرغم من أنه يمكننا استخدامها ، إلا أننا نحتاج إلى إجراء بعض التعديلات. وبعد ذلك سوف أخبرهم وأعرضهم على سبيل المثال لإحدى الطرق الحالية وتنسيق الملف الشائع.
عن ابن آوى
إذا كنت تضغط ، ثم الأكثر ضغطا في العالم. نحن نتحدث بالطبع عن ملفات JPEG. لا يوجد فقط الكثير من الأدوات والأساليب الحالية لتضمين البيانات ، بل هو تنسيق الرسومات الأكثر شعبية على هذا الكوكب.

ومع ذلك ، حتى لا تشارك في تربية الكلاب ، تحتاج إلى الحد من مجال نشاطك في ملفات بهذا التنسيق. لا أحد يحب المربعات أحادية اللون التي تنشأ بسبب الضغط الزائد ، لذلك تحتاج إلى قصر نفسك على العمل مع ملف مضغوط بالفعل ، وتجنب الترميز . بشكل أكثر تحديدًا ، مع المعاملات الصحيحة التي تبقى بعد العمليات المسؤولة عن فقد البيانات - DCT والتكمية ، والتي يتم عرضها تمامًا على نظام الترميز (بفضل ويكي مكتبة باومان الوطنية):

هناك العديد من طرق التحسين الممكنة لملفات JPEG. هناك تحسين بلا خسائر (jpegtran) ، وهناك تحسين بلا خسائر ، والذي في الواقع لا يزال يساهم ، لكنهم لا يزعجوننا. في الواقع ، إذا كان المستخدم مستعدًا لتضمين معلومات في أخرى من أجل زيادة مساحة القرص الحرة ، فهو إما قام بتحسين صوره لفترة طويلة أو لا يريد القيام بذلك على الإطلاق بسبب الخوف من فقدان الجودة.
F5
في ظل هذه الظروف ، تكون مجموعة كاملة من الخوارزميات مناسبة ، ويمكن العثور عليها في هذا العرض التقديمي الجيد . أكثرها تطوراً هي خوارزمية F5 ، التي ألفها أندرياس ويستفيلد ، والتي تعمل مع معاملات مكون السطوع ، لأن العين البشرية هي الأقل حساسية لتغيراتها. علاوة على ذلك ، يستخدم أسلوب التضمين استنادًا إلى تشفير المصفوفة ، والذي يسمح لأحد بالقليل من التغييرات عند تضمين نفس الكمية من المعلومات ، وكلما زاد حجم الحاوية المستخدمة.
تنخفض التغييرات نفسها في القيمة المطلقة للمعاملات لكل وحدة في ظل ظروف معينة (أي ، ليس دائمًا) ، مما يجعل من الممكن استخدام F5 لتحسين تخزين البيانات على القرص الثابت. الحقيقة هي أن المعامل بعد هذا التغيير من المرجح أن يشغل عددًا أقل من البتات بعد ترميز هوفمان بسبب التوزيع الإحصائي للقيم في JPEG ، وسوف تستفيد الأصفار الجديدة من تشفيرها باستخدام RLE.
التعديلات الضرورية تنزل إلى القضاء على الجزء المسؤول عن السرية (التقليب بكلمة مرور) ، والذي يسمح بتوفير الموارد ووقت التنفيذ ، وإضافة آلية للعمل مع العديد من الملفات بدلاً من واحد في وقت واحد. بمزيد من التفصيل ، من غير المرجح أن تكون عملية تغيير القارئ مثيرة للاهتمام ، لذلك ننتقل إلى وصف التطبيق.
التكنولوجيا العالية
لإثبات عمل هذا النهج ، قمت بتطبيق الطريقة بصيغة C البحتة ونفذت عددًا من التحسينات من حيث السرعة والذاكرة (لا يمكنك تخيل مقدار وزن هذه الصور دون ضغط حتى قبل DCT). يتم تحقيق الأداء عبر النظام الأساسي باستخدام مجموعة من مكتبات libjpeg و pcre و tinydir التي أشكرهم عليها. كل هذا سوف يتم عن طريق الصنع ، لذلك يريد مستخدمو Windows تثبيت بعض Cygwin للتقييم ، أو التعامل مع Visual Studio والمكتبات بمفردهم.
يتوفر التطبيق في شكل أداة مساعدة وحدة التحكم ومكتبة. يمكن العثور على مزيد من المعلومات حول استخدام هذا الأخير في الملف التمهيدي في المستودع على github ، وهو رابط أرفق به في نهاية المنشور.
كيف تستخدم؟
بحذر. يتم تحديد الصور المستخدمة للتغليف من خلال البحث التعبير العادي في الدليل الجذر المحدد. في نهاية الملف ، يمكنك نقل وإعادة تسمية ونسخ حسب رغبتك فيه ، وتغيير الملف وأنظمة التشغيل ، وما إلى ذلك. ومع ذلك ، يجب أن تكون حذرًا للغاية ولا تقم بتغيير المحتويات الفورية. يمكن أن يؤدي فقدان القيمة حتى بت واحد إلى عدم القدرة على استعادة المعلومات.
عند الانتهاء من العمل ، تترك الأداة المساعدة ملف أرشيف خاصًا يحتوي على جميع المعلومات اللازمة للتفريغ ، بما في ذلك البيانات الموجودة على الصور المستخدمة. في حد ذاته ، يزن بترتيب بضع كيلو بايت وليس له أي تأثير كبير على مساحة القرص المشغولة.
يمكنك تحليل السعة المحتملة باستخدام علامة "-a": "./f5ar -a [مجلد البحث] [التعبير العادي المتوافق مع Perl]". تتم عملية التغليف باستخدام الأمر "./f5ar -p [مجلد البحث] [التعبير العادي المتوافق مع Perl] [الملف المحزوم] [اسم الأرشيف]" ، والتفريغ باستخدام "./f5ar -u [ملف الأرشيف] [اسم الملف المستعاد]]" .
مظاهرة العمل
لإظهار فعالية هذه الطريقة ، قمت بتنزيل مجموعة من 225 صورة مجانية تمامًا للكلاب من خدمة Unsplash وحصلت على ملف pdf كبير لمدة 45 مترًا في مستندات المجلد الثاني من Knut Programming Art .
التسلسل بسيط جدا:
$ 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. تم تفسير هذا الاختلاف الجذري من خلال انخفاض قيم المعامل ، والتي تؤثر على ضغطها اللاحق دون خسارة: انخفاض واحد فقط بواحد يمكنه بهدوء " قطع "بضع بايت من الملف الناتج. ومع ذلك ، لا يزال هذا هو فقدان البيانات ، وإن كان صغيراً للغاية ، عليك تحمله.
لحسن الحظ ، فهي ليست واضحة للعين تماما. تحت المفسد (نظرًا لعدم قدرة habrastorage على التعامل مع الملفات الكبيرة) ، يمكن للقارئ تقييم الفرق من حيث العين وكثافتها ، ويتم الحصول عليها بطرح قيم المكون الذي تم تغييره من الأصل: الأصلي ، مع وجود معلومات من الداخل ، الفرق ( اختلاف لون اللون ، كلما كان الفرق في الكتلة أصغر ).
بدلا من الاستنتاج
النظر إلى كل هذه الصعوبات ، قد يبدو شراء محرك أقراص ثابت أو تحميل كل شيء على السحابة حلاً أبسط بكثير للمشكلة. ولكن على الرغم من أننا نعيش الآن في مثل هذا الوقت الرائع ، فلا توجد ضمانات بأنه غدًا سيكون من الممكن الاتصال بالإنترنت وتحميل جميع بياناتك الإضافية إلى مكان ما. أو تعال إلى المتجر واشترِ نفسك محرك أقراص ثابت آخر بحجم ألف تيرابايت. ولكن يمكنك دائمًا استخدام المنازل التي ترقد بالفعل.
-> جيثب