الموقف المحبِط
لقد مررت بهذا من قبل. يرسل لك زميل تقرير PDF بحجم 50 ميغابايت. تظن أنه كبير جدًا على الإرسال عبر البريد الإلكتروني، فتضعه في 7-Zip، وترفع الضغط إلى «ألترا»، وتنتظر. النتيجة؟ أرشيف بحجم 49 ميغابايت. ترسله على أي حال، ويستخرجه المستلم، ويظل الملف 50 ميغابايت — لا يقل بايت واحد.
هذا ليس صدفة. خذ MP4 أو JPG أو PDF مضغوطًا بالفعل، وضعه في ملف ZIP، بالكاد يتحرك الحجم. لكن شغّل نفس 7-Zip على مجلد من ملفات TXT أو BMP أو CSV خام، وقد يتقلص الأرشيف إلى عُشر حجمه الأصلي.
لماذا هذا الفرق الكبير؟ تكمن الإجابة في تمييز لا يتعلمه معظم الناس أبدًا: ضغط الأرشيف وضغط المحتوى عمليتان مختلفتان جذريًا. افهم الفرق، وكفّ عن إضاعة الوقت في ضغط ملفات تأبى التقلّص — وابدأ باللجوء إلى الأداة المناسبة في الموقف المناسب.
ضغط الأرشيف: فن الحاوية
يعمل ضغط الأرشيف على مستوى الحاوية. وهو يقوم بأمرين: يجمع ملفات متعددة في حاوية واحدة، ويطبّق خوارزمية ضغط بدون فقد لإزالة التكرار الإحصائي في تيار البايتات.
تعتمد صيغ الأرشيف المألوفة — ZIP و7Z وTAR.GZ وRAR — جميعها على خوارزميات متشابهة تحت الغطاء. يستخدم ZIP افتراضيًا DEFLATE، الذي يجمع بين LZ77 وترميز هوفمان. يجد LZ77 تسلسلات البايتات المتكررة ويستبدلها بمراجع مسافة-وطول؛ ثم يخصص ترميز هوفمان أكوادًا ثنائية أقصر للأحرف الأكثر تكرارًا وأطول للأقل تكرارًا. تستخدم صيغة 7Z من 7-Zip خوارزمية LZMA افتراضيًا، التي توسّع LZ77 بترميز النطاق وتدعم نوافذ قاموس أكبر بكثير، محققةً عادةً نسبًا أفضل من DEFLATE.
إليك النقطة الحاسمة: ضغط الأرشيف لا يعدّل محتوى الملفات أبدًا. يعامل كل ملف كتيار بايتات معتم ويصطاد الأنماط الإحصائية داخل ذلك التيار. عند استخراج أرشيف ZIP، تعود الملفات متطابقة بايتًا ببايت مع الأصول — لا يتغير بكسل واحد.
هذا يفسّر موقف الافتتاحية. فقد ضغط ملف PDF بالفعل تيارات صوره وخطوطه داخليًا باستخدام DEFLATE. وملف JPG هو بحد ذاته صيغة مضغوطة. ويستخدم MP4 معيار H.264 أو H.265 لضغط إطارات الفيديو. أُزيل التكرار من هذه الملفات بالفعل، فلم يتبقَّ لخوارزميات الأرشيف ما تعمل عليه. في المقابل، تفيض صور BMP النقطية وصوت WAV غير المضغوط وملفات CSV النصية البسيطة بالتكرار القابل للضغط — وهنا يتفوق ضغط الأرشيف.
حيث يتفوق ضغط الأرشيف حقًا هو في إزالة التكرار عبر ملفات متعددة. لنفترض أن مجلدًا يحتوي على 100 لقطة شاشة، تحمل جميعها نفس علامة الشعار المائي وشريط أدوات مشابهًا. يمكن لقاموس LZMA الكبير تحديد هذه التكرارات بين الملفات وتحقيق ضغط أفضل بكثير من ضغط كل ملف على حدة. لهذا السبب فإن تجميع الملفات في أرشيف واحد أكثر كفاءة من ضغطها واحدًا تلو الآخر.
من المفيد فهم دور قاموس الضغط هنا. يحافظ كل من DEFLATE وLZMA على نافذة منزلقة للبيانات المُشاهدة حديثًا — القاموس — تُطابَق معها البايتات الجديدة. نافذة DEFLATE مثبتة عند 32 كيلوبايت، مما يحدّ من المسافة التي يمكن أن يعثر فيها على التكرارات. أما LZMA فيتيح تكوين قواميس بحجم 64 ميغابايت أو أكثر، مما يعني أن نمطًا يظهر في أول ملف من دفعة يمكن الإشارة إليه عند ظهوره مجددًا في آخر ملف. لهذا يُضغط أرشيف واحد كبير يحوي ملفات متشابهة كثيرًا أفضل من أرشيفات صغيرة كثيرة: لدى القاموس مادة أكثر يستمد منها، ويُلتقط التكرار بين الملفات. حين تُحزَّم كل ملف على حدة، يبدأ كل أرشيف بقاموس فارغ، ويضيع التكرار بين الملفات بالكامل.
ضغط المحتوى: إعادة البناء من الداخل
يسلك ضغط المحتوى مسارًا آخر. لا يكترث بعدد الملفات لديك، ولا يجمع شيئًا. بدلًا من ذلك، يغوص في البنية الداخلية لملف واحد ويحسّن البيانات وفقًا لنوع ذلك الملف تحديدًا.
تختلف التقنيات كليًا حسب نوع الملف:
الصور يمكن إعادة أخذ عيناتها (تصغير أصل 4000×3000 إلى 1920×1080)، أو إعادة ترميزها (تحويل PNG إلى WebP أو AVIF)، أو تقليل عمق ألوانها (24-بت إلى 8-بت مفهرس). صورة هاتف بحجم 8 ميغابايت، مع تعديلات منطقية للدقة والجودة، تُضغط عادةً إلى أقل من 500 كيلوبايت دون فرق مرئي للعين.
ملفات PDF يمكن أن تُعاد أخذ عينات صورها المضمّنة بدرجة أقل، وتُحوَّل تيارات الخطوط غير المضغوطة إلى CFF فرعي، وتُحذَف الكائنات غير المُشار إليها، وتُدمَج كائنات XObject المكررة. مستند تصميم بحجم 50 ميغابايت مليء بالرسوم التوضيحية عالية الدقة يمكن أن يتقلص غالبًا إلى 5-8 ميغابايت بعد ضغط المحتوى.
ملفات PDF مثال مُعلم بشكل خاص لأنها في جوهرها حاويات بحد ذاتها. يخزّن PDF كل صورة ككائن تيار، وكل خط كتيار آخر، والنص كتيارات محتوى مُرمَّزة. معظم المُنشِئات تطبّق بالفعل DEFLATE على تيارات النص والخطوط، وJPEG أو DCT على الصور الفوتوغرافية. لهذا بالكاد يتقلص PDF عند تمريره إلى أداة أرشفة — الثمار السهلة قد قُطفت بالفعل. بدلًا من ذلك، يعيد ضغط المحتوى فحص كل تيار: يأخذ عينات الصور التي تتجاوز دقتها حاجة العرض المستهدف بدرجة أقل، ويحوّل تيارات الصور بدون فقد إلى JPEG حيثما يكون مقبولًا، ويتخلص من البيانات الوصفية مثل المصغّرات المضمّنة والطبقات المخفية، ويدمج كائنات XObject النموذجية المكررة. النتيجة ليست غلافًا أرفع حول نفس البيانات؛ بل مستند أقل حجمًا من حيث الأساس.
الخطوط يمكن تحويلها إلى مجموعات فرعية، فلا يُحتفظ إلا بالعشرات القليلة من الرسوم (الغليفات) المستخدمة فعلًا في مستند بدلًا من شحن ملف خط بأكمله يحوي عشرات الآلاف من الأحرف.
الفيديو والصوت يمكن إعادة ترميزهما برماز أكثر كفاءة — فالترقية من H.264 إلى H.265 مثلًا تقلّص معدل البت تقريبًا إلى النصف عند الجودة ذاتها.
لضغط المحتوى خاصية مُعرِّفة: فهو يعدّل البيانات الداخلية للملف، وغالبًا ما يكون مع فقد. لا يمكن استعادة صورة مضغوطة إلى بكسلاتها الأصلية؛ ولا يمكن إعادة تجميع خط فرعي إلى محرف كامل. والمقايضة أن الملف يصبح أصغر عند المصدر — لا حاجة للاستخراج، فهو جاهز للاستخدام كما هو.
مقارنة بصرية
يوضّح المخطط أدناه الفرق الجوهري في سير العمل بين المنهجين:
المسار الأيسر هو دورة «تجميع–نقل–استخراج–استعادة» حيث لا يتغير محتوى الملفات أبدًا. والمسار الأيمن عملية باتجاه واحد «تحليل–تحسين–توليد» حيث يُعاد بناء الملف نفسه.
أمثلة برمجية: رؤية الفرق
يجعل بايثون التمييز في غاية الوضوح.
ضغط الأرشيف باستخدام zipfile
import zipfile
import os
# ضغط الأرشيف: تجميع ملفات متعددة في ملف zip واحد
source_files = ['report.pdf', 'photo.jpg', 'data.csv']
archive_name = 'bundle.zip'
with zipfile.ZipFile(archive_name, 'w', zipfile.ZIP_DEFLATED) as zf:
for file in source_files:
zf.write(file)
# قياس النتيجة
original = sum(os.path.getsize(f) for f in source_files)
packed = os.path.getsize(archive_name)
print(f"Original total: {original / 1024 / 1024:.2f} MB")
print(f"Archive size: {packed / 1024 / 1024:.2f} MB")
print(f"Ratio: {packed / original * 100:.1f}%")
# مخرجات نموذجية (ملفات بالفعل في صيغ مضغوطة):
# Original total: 58.30 MB
# Archive size: 57.10 MB
# Ratio: 97.9%
لاحظ النسبة — لا يكاد يكون هناك تغيير. وبما أن هذه الملفات بالفعل في صيغ مضغوطة، فإن ضغط الأرشيف عاجز.
ضغط المحتوى باستخدام PIL
from PIL import Image
import os
# ضغط المحتوى: تحسين بيانات الصورة ذاتها
src = 'photo.jpg'
dst = 'photo_optimized.jpg'
img = Image.open(src)
before = os.path.getsize(src)
# ضغط محتوى ثلاثي الجوانب
img.thumbnail((1920, 1080)) # تقليل الدقة
img.save(dst, 'JPEG',
quality=75, # جودة أقل
optimize=True, # تحسين جداول هوفمان
progressive=True) # ترميز تزايدي
after = os.path.getsize(dst)
print(f"Original size: {before / 1024 / 1024:.2f} MB")
print(f"Optimized size: {after / 1024:.2f} KB")
print(f"Ratio: {after / before * 100:.1f}%")
# مخرجات نموذجية:
# Original size: 8.20 MB
# Optimized size: 480.50 KB
# Ratio: 5.7%
الكلمة ذاتها — «ضغط» — ومع ذلك يحوّل أحدهما 58 ميغابايت إلى 57 ميغابايت بينما يحوّل الآخر 8 ميغابايت إلى 480 كيلوبايت. تنشأ الفجوة مما يلمسه كل منهما: الأول يعيد ترتيب الحاوية فقط، والثاني يعيد كتابة المحتوى.
مقارنة بنظرة سريعة
| البُعد | ضغط الأرشيف | ضغط المحتوى |
|---|---|---|
| ماذا يفعل | يجمع الملفات ويزيل التكرار | يحسّن البيانات الداخلية للملف |
| الهدف | حاوية الملفات (مستوى متعدد الملفات) | محتوى الملف (مستوى البيانات) |
| الطريقة | DEFLATE / LZMA وخوارزميات بدون فقد أخرى | إعادة أخذ العينات / تحويل الترميز / تجميع فرعي |
| الفقد | بدون فقد؛ قابل للاستعادة كاملًا عند الاستخراج | غالبًا مع فقد؛ غير قابل للعكس |
| الاستخدام | يجب استخراجه قبل الاستخدام | يُستخدم مباشرة، بلا استخراج |
| السيناريو النموذجي | نقل ملفات متعددة، نسخ احتياطي | تقليل الحجم، تحسين الويب، مرفقات البريد |
| الفعالية | تعتمد على التكرار؛ شبه معدومة على الملفات المضغوطة مسبقًا | يمكن أن تحقق نسب ضغط 10x فأكثر |
دراسة حالة: مصيران لملف PDF بحجم 50 ميغابايت
خذ ملف PDF حقيقيًا بحجم 50 ميغابايت (عدة صفحات من صور ممسوحة ضوئيًا بدقة عالية) وقارن:
المنهج أ: ضغط الأرشيف
- الأداة: 7-Zip، LZMA2 ألترا
- النتيجة: 50 ميغابايت ← 49.2 ميغابايت
- السبب: تيارات الصور الداخلية للملف PDF مضغوطة بالفعل بصيغة JPEG باستخدام DCTDecode، وتيارات الخطوط تستخدم FlateDecode. لا يجد ضغط الأرشيف تكرارًا متبقيًا لاستغلاله.
المنهج ب: ضغط المحتوى
- العمليات: إعادة أخذ عينات للصور المضمّنة إلى 150 DPI، خفض جودة JPEG إلى 75، تجميع فرعي للخطوط، إزالة الكائنات غير المُشار إليها
- النتيجة: 50 ميغابايت ← 6.8 ميغابايت
- السبب: يستهدف الضغط الجزء الأكبر من PDF — الممسوحات عالية الدقة. عند 150 DPI، تبدو القراءة على الشاشة متماثلة عمليًا، ومع ذلك فإن الملف أصغر بسبعة أضعاف.
يُنتج «الضغطان» فرقًا بمقدار 7x. إذا كان هدفك إرسال ذلك PDF عبر البريد، فالمنهج ب هو الإجابة؛ والمنهج أ يضيع الجهد فقط.
اختيار المنهج الصحيح
بوجود الأداتين معًا، يصبح القرار مباشرًا. اسأل نفسك ما الذي تحاول تحقيقه:
- هل تحتاج إلى نقل ملفات كثيرة دفعة واحدة؟ استخدم ضغط الأرشيف. فهو يجمع ويتحقق ويعصر التكرار بين الملفات في خطوة واحدة — مثالي للنسخ الاحتياطي وتوزيع الشيفرة المصدرية ونقل هياكل المجلدات.
- هل تحتاج إلى ملف واحد أصغر؟ استخدم ضغط المحتوى. ملف PDF بحجم 50 ميغابايت مُعدّ للبريد لن يتقلص في ZIP، لكنه سيتقلص بشكل كبير بمجرد إعادة أخذ عينات صوره الداخلية.
- هل تحتاج إلى كليهما؟ طبّق ضغط المحتوى على كل ملف أولًا، ثم جمّع النتائج بضغط الأرشيف. الترتيب غير قابل للتفاوض: يجب أن تتم تحسين المحتوى بينما لا تزال البنية الداخلية للملف قابلة للوصول، قبل أن تُختم داخل أرشيف.
نموذج ذهني مفيد: ضغط الأرشيف يقلّل تكلفة النقل، بينما يقلّل ضغط المحتوى تكلفة التخزين. إذا كان ملفك صغيرًا بما يكفي للنقل بالفعل لكنه يعيش بشكل دائم على خادم، فإن ضغط المحتوى يُثمر عبر النطاق الترددي الموفّر في كل تنزيل. أما إذا كنت تشحن دفعة ملفات لمرة واحدة فقط، فإن ضغط الأرشيف هو الخيار الأخف.
الأسئلة الشائعة
س1: لماذا بالكاد يقلّص 7-Zip ملفات PDF أو JPG أو MP4؟
لأن هذه الملفات صيغ مضغوطة بالفعل. تضغط ملفات PDF تيارات الصور والخطوط داخليًا بـDEFLATE؛ وتضغط JPG بيانات الصور بتحويلات DCT؛ وتضغط MP4 إطارات الفيديو بـH.264/H.265. تواجه خوارزميات الأرشيف بيانات قد عُصرت بالفعل، فلا يتبقى تكرار إحصائي لإزالته. ضغط الأرشيف فعّال على البيانات الخام غير المضغوطة — BMP وWAV والنص البسيط.
س2: هل يفقد ضغط المحتوى الجودة؟ كيف أوازن بين الحجم والجودة؟
معظم ضغط المحتوى يكون مع فقد، لكن درجة الفقد قابلة للتحكم. بالنسبة للصور، تتبادل الحجم مقابل الوضوح بضبط الدقة والجودة — 72-96 DPI عند جودة 75 جيد عادةً للشاشات، بينما يتطلب الطباعة 300 DPI. التجميع الفرعي للخطوط بدون فقد ولا يؤثر على العرض. المفتاح هو مطابقة مستوى الضغط مع حالة الاستخدام، لا تطبيق إعداد واحد يناسب الجميع.
س3: هل يمكن استخدام ضغط الأرشيف وضغط المحتوى معًا؟
نعم، وغالبًا ما يُستخدمان كذلك. سير العمل النموذجي: طبّق ضغط المحتوى أولًا لتصغير كل ملف عند المصدر، ثم طبّق ضغط الأرشيف لتجميع الملفات الأصغر للنقل. الترتيب مهم — المحتوى أولًا ثم الأرشيف. عكس الترتيب يحبس بنية الملف داخل الأرشيف، مانعًا ضغط المحتوى من التدخل. حسّن المحتوى أولًا ثم جمّع، فتلتقط فوائد كلتيهما.
الخلاصة
ضغط الأرشيف وضغط المحتوى يحملان معًا اسم «الضغط»، لكنهما يعملان على طبقتين مختلفتين. يعمل ضغط الأرشيف على مستوى الحاوية — يجمع ويزيل التكرار بدون فقد، بأثر محدود على الملفات المضغوطة بالفعل. ويعمل ضغط المحتوى على مستوى البيانات — يعيد بناء البنية الداخلية للملف، غالبًا مع فقد، لكنه يصغّره عند المصدر.
في المرة القادمة التي تجد فيها نفسك تحدّق في ملف «مضغوط» لم يصغر، اسأل نفسك: هل أضغط الحاوية أم المحتوى؟ اختر الطبقة الصحيحة، وأخيرًا يقوم الضغط بعمله.
مقالات ذات صلة:
- الدليل الشامل لضغط الملفات: مبادئ وطرق ضغط PDF/الصور/الفيديو/المستندات
- الضغط بدون فقد مقابل الضغط مع فقد
هل تحتاج لضغط الملفات؟ جرّب SmartSlim
على أساس محرك ضغط Rust خاص، يدعم 10 فئات رئيسية و40+ صيغة بما في ذلك PDF/الصور/الفيديو/Office/OFD. معالجة محلية — البيانات لا تغادر نطاقك.