هل يمكن تقليل حجم ملف الصورة مع بقاء العرض والارتفاع، وهل يعني ذلك أن البكسلات بقيت مطابقة؟ أجرينا اختبار ترميز رقمي محدودًا على رسم عربي مسطح وملمس إجرائي أصليين، وكل نسخة بقيت 900×600 بكسل. سنعرض أحجام الملفات الفعلية، ونفصل تغير البايتات من تغير قيم RGB بعد القراءة، ثم نطبق النتائج على قرار عملي لا يعد بنسبة توفير واحدة لكل صورة.
الخلاصة السريعة
يمكن تقليل بعض ملفات الصور مع إبقاء أبعادها، لكن بقاء الأبعاد لا يثبت تطابق البكسلات؛ قارن البايتات وافتح النسخة وافحص ما يجب الحفاظ عليه قبل اختيارها.
- الاختبار محلي ومحدود بعينتين أصليتين معتمتين 900×600، باستخدام Pillow12.3.0؛ لا يختبر صور كاميرا أو شفافية أو حركة أو EXIF أو ICC، ولا يغير الأبعاد.
- في الرسم المسطح،PNG المرجعي 18460 بايتًا، و PNG المحسن 17717، و WebP بلا فقدان 7688، و JPEG80 مع 4:4:4 بلغ 32694. لم يكن JPEG الأصغر في هذه العينة.
- في الملمس،PNG المرجعي 886614 بايتًا، و WebP بلا فقدان 605598، و JPEG80 مع 4:4:4 بلغ 114365، ومع 4:2:0 بلغ 91051. كانت JPEG أصغر هنا، لكنها غير مطابقة لـ RGB الأصلي.
- quality و optimize إعدادات ترميز موثقة في Pillow، و lossless=True يحدد وضع WebP بلا فقدان. رقم 80 ليس نسبة تفاصيل باقية، ولا نفترض تطابق معنى الإعدادات بين الأدوات. [1]
- فحص RGB أعطى تطابقًا في PNG المحسن و WebP بلا فقدان في العينتين، واختلافًا في JPEG. متوسط الفرق العددي ليس حكمًا بصريًا على القراءة والوضوح؛ افحص المحتوى عند حجم الاستخدام.
- لا تجعل PNG بمستوى ضغط صفر وحجمه 1621186 بايتًا المرجع لتضخيم التوفير. تحت حد مؤلف 150000 بايت تمر نسختا JPEG80 للملمس، لكن يلزم أيضًا قبول الصيغة والوضوح وبقية الشروط.
- ابدأ كل مقارنة من أصل محفوظ، وسجل الصيغة والإعدادات والأبعاد والبايتات. إذا سمحت بتغيير المقاس فهذه تجربة أخرى؛ النتيجة تخص الملفات والإصدارات المختبرة ولا تعطي صيغة رابحة دائمًا.
افصل حجم الملف من عدد البكسلات
صورة أبعادها 900×600 تحتوي 540000 موضع بكسل، لكن هذا العدد لا يخبرك وحده كم بايتًا سيشغل ملفها. في اختبارنا بقيت هذه الأبعاد نفسها في جميع النسخ، بينما اختلفت أحجام الملفات. لذلك عندما تطلب جهة ملفًا أصغر، حدد هل تقصد عدد البايتات أم العرض والارتفاع؛ المطلوبان مختلفان ويمكن أن يكون لكل منهما حد مستقل.
نستعمل كلمة «الترميز» لطريقة كتابة بيانات الصورة داخل ملف، و«فك الترميز» لقراءة تلك البيانات وإعادة قيم البكسلات. يمكن أن يتغير الملف مع بقاء قيم الصورة المقروءة نفسها، ويمكن أن تتغير القيم أيضًا. سنفحص النوعين بدل عد كل ملف صغير نسخة مساوية للأصل أو عد كل اختلاف في الملف تغييرًا مرئيًا.
المقارنة هنا بين صور ذات أبعاد ثابتة، وليست درسًا لتغيير 900×600 إلى مقاس أصغر. وهذا لا يعني أن التصغير غير مفيد لغرض آخر؛ معناه أننا نعزل في الاختبار أثر إعدادات الترميز والصيغة. إذا غيرت الأبعاد في محاولة خاصة بك، فسجل ذلك وابدأ مقارنة جديدة لا تختلط بنتائج الأبعاد الثابتة.
احتفظ باسمين واضحين في سجل عملك: «الأبعاد بالبكسل» و«حجم الملف بالبايت». ثم أضف الصيغة والإعدادات. عبارة «الحجم 900» لا توضح هل هي عرض صورة أم عدد كيلوبايتات أم شيء آخر. هذا التحديد البسيط يجعل قرار اختيار نسخة أو رفضها مبنيًا على شرط الجهة التي تريد إرسالها إليها.
ما الذي نفذناه في الاختبار الرقمي؟
أنشأنا عينتين رقميتين أصليتين: الأولى رسم مسطح بألوان محدودة وخطوط رفيعة ونص عربي، والثانية تدرج لوني وملمس إجرائي مع نص. الثانية ليست صورة فوتوغرافية، والرسم الأول لا يعرض بيانات ميدانية. حُولت العينتان إلى صور RGB معتمة بأبعاد 900×600، ثم استعملنا ملفي البكسلات نفسيهما أساسًا لكل نسخة ترميز.
استعمل الاختبار Pillow12.3.0، ووثقنا libjpeg-turbo3.1.4.1 و WebP1.6.0 في بيئة التنفيذ نفسها. هذه معلومات عن التنفيذ المحلي الذي أنتج الأعداد التالية، وليست ادعاءً بأن كل أداة ضغط تستعمل المكتبات أو الخيارات نفسها. سجلنا الأبعاد والبايتات والقيم المقروءة للملفات التي اعتمدنا عليها، حتى تبقى المقارنة مرتبطة بما فحصناه فعلًا.
في JPEG قارنا إعدادَي جودة 95 و 80 مع أخذ عينات لونية 4:4:4، ثم نسخة أخرى عند 80 مع 4:2:0. فعلنا خيار optimize في نسخ JPEG. وأنتجنا WebP بوضع lossless، ونسخة PNG محسنة، ونسخة PNG بمستوى ضغط صفر لتكون حالة ضابطة. لم نعد تحجيم أي نسخة، ولم نستعمل نسخة JPEG سابقة أصلًا للنسخة التالية.
لم يتضمن الاختبار قناة شفافية أو حركة أو بيانات EXIF أو ملف تعريف لوني ICC. لذلك لن نستنتج منه كيف تعالج أداة ما صورة متحركة أو شفافة أو ملف كاميرا يحمل تلك البيانات. إنه اختبار محدود لصورتين معتمتين، يقارن البايتات وقيم RGB المقروءة ضمن الخيارات والإصدارات التي وثقناها.
الرسم المسطح: JPEG لم يكن الأصغر في هذه النتائج
كان ملف PNG المرجعي للعينة الأولى 18460 بايتًا. صار PNG المحسن 17717 بايتًا، و WebP بلا فقدان 7688 بايتًا. أما JPEG عند 95 مع 4:4:4 فبلغ 55228 بايتًا، وعند 80 مع الخيار اللوني نفسه بلغ 32694 بايتًا. جميعها 900×600 بكسل.
هذه العينة تحتوي مساحات لون مسطح ونصًا وحدودًا واضحة، وقد أعطت في تنفيذنا ملفات بلا فقدان أصغر من نسختَي JPEG المذكورتين. لا نعمم ذلك على كل رسم أو كل صورة. النتيجة المحددة تكفي لرفض وعد آلي بأن تحويل أي PNG إلى JPEG سيجعل الملف أصغر؛ علينا قياس الملف الناتج نفسه.
نسخة JPEG عند 80 مع 4:2:0 بلغت 22444 بايتًا، فكانت أصغر من نسخة 80 مع 4:4:4، لكنها بقيت أكبر من PNG المحسن ومن WebP بلا فقدان في العينة الأولى. التغيير في الإعداد اللوني أثر في العدد الذي نقيسه، ولذلك لا نستعمل اسم JPEG وحده وصفًا كاملًا لطريقة إنشاء النسخة.
إذا كانت صورتك رسمًا فيه حروف وحدود، افتح النسخة بعد التصدير واقرأ الحروف عند الحجم الذي ستعرض به. لا تجعل كون الامتداد jpg أو webp ضمانًا للوضوح أو للحجم. في الاختبار لدينا قياس بايتات وفحص قيم بكسلات؛ وفي استعمالك تحتاج أيضًا إلى فحص ما يتطلبه المحتوى والجهة التي ستستقبل الملف.
الملمس الإجرائي: ملف أصغر مع قيم RGB مختلفة
في العينة الثانية كان PNG المرجعي 886614 بايتًا، و PNG المحسن 853212، و WebP بلا فقدان 605598 بايتًا. أعطى JPEG عند 95 مع 4:4:4 ملفًا حجمه 273372 بايتًا، وعند 80 مع 4:4:4 صار 114365 بايتًا.
ومع الجودة 80 و 4:2:0 صار ملف JPEG91051 بايتًا. هذه المرة كانت ملفات JPEG المذكورة أصغر من البدائل بلا فقدان التي اختبرناها. لكن قيم RGB المقروءة منها لم تطابق الأصل. لا نخفي هذا الفرق خلف عبارة «حافظنا على الأبعاد»؛ بقاء 900×600 لم يضمن بقاء كل قيمة بكسل.
الرسم الرئيسي يعرض أحجام عينتي الاختبار في لوحتين، ولكل لوحة مقياسها العددي الواضح. لا تقارن ارتفاع عمود من اللوحة الأولى بعمود من الثانية من دون قراءة المحور. ابدأ بالأرقام المكتوبة والبايتات، ثم اسأل عن نتيجة فحص البكسلات؛ اختلاف المادة الرقمية والإعدادات هو ما يجعل هذه المقارنة مفيدة.
لو أرسلت هذين النوعين من الصور في مهمة واحدة، فلا يلزم اختيار الصيغة نفسها لهما لمجرد أنهما يشتركان في المقاس. تستطيع تجربة خيارات لكل ملف ثم التحقق من شرط الجهة والوضوح. لا تعد أعداد الملمس دليلًا على نتيجة صورة كاميرا لم نختبرها؛ اختلاف العينة يظل قيدًا أساسيًا في تفسير النتائج.
| النسخة عند 900×600 | العينة أ بالبايت | العينة ب بالبايت |
|---|---|---|
| PNG المرجعي | 18460 | 886614 |
| PNG المحسن | 17717 | 853212 |
| JPEG95،4:4:4 | 55228 | 273372 |
| JPEG80،4:4:4 | 32694 | 114365 |
| JPEG80،4:2:0 | 22444 | 91051 |
| WebP بلا فقدان | 7688 | 605598 |
إعداد الجودة لا يمثل نسبة تفاصيل باقية
توثق Pillow خيار quality في حفظ JPEG، وخيار optimize لإجراء محاولة إضافية لاختيار إعدادات الترميز. هذه أسماء إعدادات في أداة محددة؛ قيمة 80 ليست تصريحًا بأن 80% من تفاصيل الصورة الأصلية بقيت. عند المقارنة نذكر الإعداد ثم نقيس الناتج، ولا نحول رقم المنزلق إلى مقياس بصري لم نجره. [1]
في العينة الأولى، تغيير 95 إلى 80 مع بقاء 4:4:4 خفض البايتات من 55228 إلى 32694. وفي الثانية خفضها من 273372 إلى 114365. حدث ذلك في الملفات التي أنشأناها، ولا نعد بفارق عددي مماثل لكل صورة أو تطبيق.
ثم غيرنا أخذ العينات اللونية مع تثبيت 80 في نسخة أخرى. لذلك إذا قارنت أداتين وكلتاهما تعرض 80، فلا تفترض أن بقية الإعدادات وآلية الترميز واحدة. قياس الملف ومراجعة الصورة أدق من اعتبار رقم الجودة عملة موحدة بين جميع الأدوات. اكتب ما تعرفه عن الإعدادات، واترك ما لم تعرفه غير مفترض.
لم نختبر في هذه المقارنة JPEG عند 100، ولا نعرضه علاجًا لاستعادة التفاصيل. ما يستطيع جدولنا إثباته هو ما سجلناه للإعدادات الموجودة فيه. إذا أضفت خيارًا جديدًا في تجربتك، ابدأ من الأصل واحفظ نتيجته تحت اسم جديد، ثم أضف القياس إلى الجدول بدل نسبته إلى اختبار لم يتضمنه.
متى تغير الملف وبقيت البكسلات المقروءة؟
تتيح Pillow حفظ WebP مع lossless=True. المقصود هنا وضع ترميز بلا فقدان، وتختلف دلالة بعض خيارات الجهد فيه عن وضع الفقدان. في اختبارنا لا نعتمد الاسم وحده لإثبات التطابق؛ قارنا قيم RGB بعد فك الترميز بالأصل، وسجلنا النتيجة للملفات المعينة التي أنتجناها. [1]
كانت قيم RGB بعد قراءة PNG المحسن و WebP بلا فقدان مطابقة للمصدر في العينتين، وكذلك في PNG ذي مستوى الضغط صفر. لكن بايتات الملفات وأحجامها لم تكن واحدة. الصورة المقروءة والوعاء الذي يخزنها مستويان مختلفان في هذه المقارنة؛ يمكن أن تختلف بصمة الملف مع اتفاق بصمة بيانات RGB التي فحصناها.
في العينة الأولى، مثلًا، تغير الملف من PNG مرجعي حجمه 18460 إلى WebP حجمه 7688 بايتًا، مع تطابق قيم RGB المقروءة في الاختبار. لا نصف النسختين بأنهما الملف نفسه حرفيًا؛ إنهما ملفان مختلفان أعادا البيانات التي اعتمدناها للمقارنة نفسها. الرسم الداخلي يبين هذين المستويين.
ولا ينقل هذا الفحص حكمًا تلقائيًا إلى قناة شفافية أو حركة أو معلومات تصوير لم تكن موجودة في العينتين. حين تحتاج إلى الحفاظ على معلومة إضافية، اجعلها بندًا مستقلًا في المراجعة. تطابق RGB الذي أثبتناه يخص تلك القيم والأبعاد والإجراء، ولا يساوي إثبات تطابق كل محتوى ممكن في أي نوع من ملفات الصور.

القياس العددي للفروق ليس حكمًا نهائيًا على الوضوح
حسبنا متوسط الفرق المطلق بين قيم قنوات RGB المقروءة وبين الأصل على جميع البكسلات. القناة في هذا الاختبار ذات قيم من صفر إلى 255. المتوسط صفر عندما اتفقت جميع القيم، وصار غير صفري في نسخ JPEG. لم نسمه نسبة جودة أو نسبة تفاصيل مفقودة؛ إنه وصف عددي محدد للفروق بين ملفين مقروءين.
في الرسم المسطح كان متوسط الفرق لنسخة JPEG95 مع 4:4:4 نحو 0.1961، ولنسخة 80 مع 4:4:4 نحو 0.4389، ولنسخة 80 مع 4:2:0 نحو 0.8252. وفي الملمس، نسخة 80 مع 4:4:4 أعطت نحو 2.8747. هذه أعداد من ملفاتنا لا درجات تقييم بصري.
متوسط واحد يجمع قيم مناطق كثيرة، ولا يخبرك وحده هل تضرر حرف صغير في موضع مهم أو تغير لون في جزء تحتاجه. افتح الأصل والنسخة وقارن النص والحدود والمناطق المطلوبة. إذا كان الغرض قراءة كتابة عربية، فنجاح قراءة تلك الكتابة بند مستقل، ولا نختزله إلى كون المتوسط العام صغيرًا.
ويختلف فحص النسخة بالحجم المعروض عن تكبيرها للبحث عن تغيرات دقيقة. يمكن استعمال الاثنين مع تسمية ما فعلته: فحص عند حجم الاستخدام، وفحص تفصيلي للبكسلات. لا تدعي أن اختلافًا لم تلحظه في معاينة صغيرة يعني تطابقًا عدديًا؛ لدينا في JPEG أمثلة اختلفت فيها القيم رغم بقاء الأبعاد نفسها.
لا تختَر مرجعًا ضخمًا لتضخيم نسبة التوفير
أنشأنا لكل عينة PNG بمستوى ضغط صفر، وكان حجمه 1621186 بايتًا. هذه حالة ضابطة توضح أن طريقة التخزين قد تزيد بايتات ملف ذي بكسلات مطابقة. لكنها ليست الملف المرجعي الذي حسبنا منه نسب تقليل الحجم في سجلنا. المرجع هو PNG بمستوى الضغط 6 الذي عرضنا بايتاته لكل عينة.
في العينة الأولى خفض PNG المحسن الحجم من 18460 إلى 17717 بايتًا؛ فرق مقداره 743 بايتًا. لو قارنته بالنسخة الضابطة غير المضغوطة بدل المرجع، لظهر رقم توفير أكبر بكثير. المقارنتان لهما أصل مختلف، ولا يجوز إخفاء ذلك عند عرض نسبة جذابة.
اكتب اسم ملف البداية وإعداداته وبايتاته مع كل نسبة تدعيها. حساب النسبة في مثال خاص هو فرق البايتات مقسومًا على بايتات البداية، ثم مضروبًا في مئة. إذا صار الملف الجديد أكبر، تكون النتيجة سلبية بهذا التعريف. لا تسمِّ الزيادة تقليلًا لمجرد أن الأداة تحمل اسم «ضاغط صور».
ولأن نتائجنا تختلف بين عينتين فقط، فلا نقدمها وعدًا بحد أدنى للتوفير. قد يكون الأصل مضغوطًا أصلًا، أو تكون الصيغة والإعدادات المختارة غير ملائمة له. القياس قبل التحويل وبعده، مع إبقاء نقطة البداية واضحة، هو ما يفصل نتيجة قابلة للمراجعة من عبارة تسويقية لا تكشف ملفها المرجعي.
طبّق حد الملف المطلوب على نتائج فعلية
نفترض للتدريب أن جهة تطلب ملفًا لا يتجاوز 150000 بايت، وتقبل JPEG و PNG و WebP، وتطلب بقاء 900×600. هذه شروط مؤلفة، وليست قواعد منصة معينة. في العينة الأولى تقع النسخ المعروضة في الجدول تحت الحد، باستثناء PNG الضابط الكبير الذي لم نجعله ضمن بدائل العرض الأساسية.
في العينة الثانية يقع JPEG80 مع 4:4:4، بحجمه 114365 بايتًا، و JPEG80 مع 4:2:0، بحجمه 91051، تحت الحد المفترض. أما JPEG95 و PNG المحسن و WebP بلا فقدان في هذه العينة فتتجاوز 150000 بايت. مرور ملف تحت الحد لا يثبت أن جميع شروط استعماله تحققت.
بعد فحص البايتات، راجع الوضوح والصيغة التي تقبلها الجهة فعلًا. إذا اشترطت PNG وحده، فلن تحل نسخة JPEG صغيرة شرط الصيغة، حتى لو حلت شرط الحجم. وإذا اشترطت أبعادًا أخرى، فهذه مقارنة مختلفة تحتاج معالجة موثقة. اقرأ شروط الجهة الحالية بدل نقل الشروط التي افترضناها هنا إلى أي موقع.
استعمل البايتات مباشرة إذا كانت الجهة تعرض الحد بهذه الوحدة. وإذا عرضته بالكيلوبايت أو غيره، تحقق من تعريف العدد في الأداة أو التعليمات. لا تخلط عددًا مكتوبًا باسم وحدة أخرى بحد البايتات الذي اخترناه، ولا تعتمد على حجم مقرب في قائمة الملفات إذا كانت النتيجة قريبة جدًا من الحد.
احفظ نسخًا مستقلة وسجل ما تغير
في الاختبار كانت كل نسخة تُنشأ من صورة RGB المرجعية، ولم نستخدم JPEG80 مصدرًا لنسخة 95 أو العكس. هذا يجعل اختلاف النتائج مرتبطًا بالإعداد الذي اختبرناه على المصدر نفسه. عند إجراء مقارنة خاصة بك، اعمل من أصل محفوظ وسم كل نسخة بما يميز إعداداتها، حتى لا تختلط محاولتان لهما مدخلان مختلفان.
يمكن كتابة اسم مثل «رسم-أ-جودة 80» في سجل العمل، مع تدوين الصيغة والإعداد اللوني والبايتات في أعمدة منفصلة. الاسم وحده قد ينسى تفصيلًا، لذلك سجل ما تستطيع إعادة التحقق منه. وإذا غيرت ملف البداية أو قصصت جزءًا أو غيرت الأبعاد، ضع ذلك في سطر جديد يبين أن المقارنة لم تعد مطابقة للسابقة.
افتح الناتج قبل إرساله، ولا تكتف بنجاح أمر الحفظ. تحقق من الأبعاد، وقراءة المحتوى المهم، والامتداد الفعلي، وحجم الملف. في اختباراتنا تحققنا أيضًا من القيم بعد فك الترميز، لكن القارئ لا يحتاج إلى حساب متوسط فروق لكل صورة كي يراجع شرط إرسال واضح؛ اختيار الفحص يتبع الغرض المطلوب.
احتفظ بالأصل عندما يكون ذلك ممكنًا، وبالنسخة التي اخترتها للإرسال منفصلة عنه. لم نجر اختبارًا لتكرار الضغط على سلسلة من نسخ JPEG، لذلك لا نستنتج من جدولنا مقدار أثر كل إعادة حفظ. ما وثقناه هو مقارنة نسخ مستقلة من مصدر واحد لكل عينة؛ حدود الإجراء جزء من النتيجة، لا هامش يمكن حذفه.
طريقة قرار قصيرة من دون وعد بصيغة رابحة دائمًا
ابدأ بشروط الصورة: هل تريد بقاء الأبعاد، وهل تحتاج قيمًا مقروءة مطابقة أو شفافية أو حركة أو معلومات أخرى؟ ثم اقرأ ما تقبله جهة الاستعمال من صيغ وأحجام. اختر خيارات ترميز تستطيع تسميتها، واحفظ نسخًا من المصدر نفسه. بعد ذلك قس البايتات وافتح النتائج وقارن المحتوى الذي يهمك.
في الرسم المسطح من تجربتنا،WebP بلا فقدان جمع بين أصغر حجم بين البدائل المعروضة وتطابق RGB في الفحص. وفي الملمس الإجرائي كانت JPEG80 أصغر من البدائل بلا فقدان، لكنها غير مطابقة عدديًا. هذان مثالان على قرارين محتملين ضمن شروط محددة، ولا يجعلان WebP أو JPEG الخيار الأفضل لكل صورة.
إذا لم تحقق نسخة شروطك، غيّر خيارًا واحدًا في تجربة جديدة عندما تستطيع، ثم سجل السبب والنتيجة. قد تقرر بعد ذلك السماح بتغيير الأبعاد، لكن أعلن أنك انتقلت إلى مسألة أخرى. لا تعد بكسلات جديدة أو تفاصيل مستعادة لمجرد أن ملفًا كبيرًا صار صغيرًا أو أن عرضه بقي بالعدد نفسه.
أجب في نهاية المراجعة عن ثلاثة أسئلة: ما الذي صغر فعلًا، وما الذي بقي كما كان، وما الذي فُحص؟ في هذه المقالة صغرت بعض ملفاتنا، وبقيت الأبعاد، واتفق RGB في النسخ المحددة بلا فقدان واختلف في JPEG. الوضوح عند استعمالك يحتاج فحصًا مناسبًا لمحتواك؛ والأرقام المنشورة تخص عينتي الاختبار وإعداداته فقط.
المصادر ومتابعة القراءة
- Pillow: خيارات حفظ JPEG و WebP وصيغ ملفات الصور (يفتح في نافذة جديدة)pillow.readthedocs.io
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
