PicScrub logoPicScrub
العودة إلى الصيغ

JPEG

الأكثر تسريبًا

يحمل ملف JPEG بياناته الوصفية في مقاطع APPn بين ترويسة الملف وبيانات الصورة. وإليك ما يسكن في كل جزء، وما يفعله PicScrub بكل منها.

ملف الألوان، يبقى إن أردت
SOIالبداية
APP0JFIF
APP1EXIF
APP1XMP
APP2ICC
APP13IPTC
COMتعليق
SOS …صورتك الحقيقية، سليمة كما هي
EOIالنهاية
هنا يختبئ GPS والكاميرا، ويُزال
مطابق بايتًا ببايت

ما الذي يُزال

  • EXIF إحداثيات GPS، وعلامة الكاميرا وطرازها، والطوابع الزمنية، وإعدادات التعريض
  • XMP سجل التحرير، والبرنامج المستخدم، والتقييمات
  • IPTC / Photoshop العناوين التوضيحية، والاعتمادات، والكلمات المفتاحية
  • التعليقات والصور المصغّرة المدمجة نسخة صغيرة من الأصل قد تنجو من كل قصّ وتعديل تجريه

ما الذي يمكنك الإبقاء عليه

  • بيانات الصورة سليمة دائمًا، ولا يُعاد ترميزها أبدًا
  • ملف الألوان ICC اختياري، كي تبقى الألوان دقيقة
  • الاتجاه اختياري، كي تبقى الصور الطولية معتدلة
  • إشعار حقوق النشر اختياري، لمن يريد نسب الصورة إليه دون الكشف عن إحداثياته

نظرة عامة على بنية الملف

إن سبق أن فتحت ملف JPEG في محرر ست عشري، فستلاحظ أنه مؤلف من مقاطع تفصل بينها علامات. وكل علامة تبدأ بـ 0xFF يليه بايت يخبرك بنوع المقطع. وهذا التصميم يجعل تحليل ملفات JPEG سهلًا نسبيًا: يكفي أن تبحث عن بايتات FF وتفحص ما يليها.

والجانب المهم للخصوصية هو أن البيانات الوصفية كلها (EXIF وGPS والطوابع الزمنية) تسكن في هذه المقاطع، منفصلة تمامًا عن بيانات الصورة الفعلية. ولذلك نستطيع إزالة البيانات الوصفية دون المساس بالبكسلات ودون إعادة ضغط أي شيء.

بنية ملف JPEG

SOI
APP0-15
DQT
SOF
DHT
SOS + Data
EOI
SOI
2 بايت
بداية الصورة (FF D8)
APP0-15
100 بايت
علامات التطبيقات (البيانات الوصفية)
DQT
130 بايت
جداول التكميم
SOF
20 بايت
بداية الإطار
DHT
420 بايت
جداول هوفمان
SOS + Data
طول متغيّر
بيانات المسح (الصورة نفسها)
EOI
2 بايت
نهاية الصورة (FF D9)

مثال على ترويسة JPEG

SOI (بداية الصورة)
علامة APP0
طول APP0
معرّف JFIF
بيانات JFIF
علامة APP1
طول APP1
معرّف Exif
OffsetHexASCII
0000
FFD8FFE000104A464946000101000048
......JFIF.....H
0010
00480000FFE112344578696600000000
.H.....4Exif..

بنية العلامة

  • FF xx:العلامة (وxx يحدد نوعها)
  • LL LL:الطول (بايتان، big-endian، ويشمل نفسه)
  • Data...:بيانات المقطع (الطول - 2 بايت)

مرجع كامل لعلامات JPEG

العلامةالاسمالوصف
FF D8SOIبداية الصورة
FF D9EOIنهاية الصورة
FF C0SOF0بداية الإطار (DCT أساسي)
FF C2SOF2بداية الإطار (DCT تدريجي)
FF C4DHTتعريف جدول هوفمان
FF DBDQTتعريف جدول التكميم
FF DDDRIتعريف فترة إعادة التشغيل
FF DASOSبداية المسح (تليها بيانات الصورة)
FF FECOMتعليق (بيانات وصفية)
FF E0APP0علامة JFIF
FF E1APP1علامة EXIF / XMP
FF E2APP2ملف ICC / MPF
FF EDAPP13IPTC / Photoshop
FF EEAPP14تحويل ألوان Adobe

الذهبي = بيانات وصفية (تُزال)، بدون تظليل = بنية تبقى كما هي

JFIF مقابل EXIF

هناك أمر يربك كثيرين: ملفات JPEG كثيرًا ما تحتوي على معيارين مختلفين للبيانات الوصفية في آن واحد. جاء JFIF أولًا ويتولى الأساسيات مثل الدقة. ثم بدأت الكاميرات تضيف بيانات EXIF بكل تفاصيل اللقطة. ومعظم ملفات JPEG الحديثة تحمل الاثنين معًا، ولهذا ترى علامتَي APP0 وAPP1 قرب بداية الملف.

APP0:JFIF

JPEG File Interchange Format. معلومات أساسية عن الصورة.

  • • رقم الإصدار
  • • كثافة البكسل (DPI)
  • • نسبة الأبعاد
  • • صورة مصغّرة اختيارية

APP1:EXIF

Exchangeable Image File Format. بيانات الكاميرا الوصفية.

  • • علامة الكاميرا وطرازها
  • • إحداثيات GPS
  • • الطوابع الزمنية
  • • إعدادات التعريض

علامات APP بالتفصيل

حجزت مواصفة JPEG ستة عشر علامة "تطبيق" (من APP0 إلى APP15) لتستخدمها الشركات كما تشاء. ومع مرور السنين، استولت جهات مختلفة على علامات مختلفة لصيغ بياناتها الوصفية. والنتيجة فوضى صغيرة، لكنها على الأقل فوضى موثّقة جيدًا.

والجانب الصعب هو أن العلامة الواحدة قد تعني أشياء مختلفة بحسب محتواها. فـ APP1 مثلًا قد تحمل بيانات EXIF أو XMP، لذا عليك النظر في سلسلة المعرّف بداخلها لتعرف أيهما بين يديك.

APP0 (0xFFE0):JFIF

المعرّف: JFIF\0. يحتوي على الإصدار ووحدات الكثافة والكثافة على المحورين X وY وصورة مصغّرة مدمجة اختيارية. وعادة ما يكون الإبقاء عليه آمنًا.

APP1 (0xFFE1):EXIF

المعرّف: Exif\0\0. يحتوي على بنية TIFF كاملة بمدخلات IFD لمعلومات الكاميرا وبيانات GPS والطوابع الزمنية والصور المصغّرة وملاحظات المصنّع. وهو أكبر مصدر قلق على الخصوصية.

APP1 (0xFFE1):XMP

المعرّف: http://ns.adobe.com/xap/1.0/\0. معيار بيانات وصفية قائم على XML من Adobe. وقد يحتوي على سجل التحرير ومعلومات البرنامج وبيانات EXIF موسّعة.

مساحات أسماء XMP
xmp: http://ns.adobe.com/xap/1.0/
xmpMM: http://ns.adobe.com/xap/1.0/mm/
dc: http://purl.org/dc/elements/1.1/
photoshop: http://ns.adobe.com/photoshop/1.0/
tiff: http://ns.adobe.com/tiff/1.0/
exif: http://ns.adobe.com/exif/1.0/

APP1 (0xFFE1):XMP الموسّع

المعرّف: http://ns.adobe.com/xmp/extension/\0. لبيانات XMP التي تتجاوز 65 كيلوبايت، فتُوزَّع على عدة مقاطع APP1.

APP2 (0xFFE2):MPF

المعرّف: MPF\0. صيغة Multi-Picture Format للصور المجسمة والبانورامية.

APP2 (0xFFE2):ملف ICC

المعرّف: ICC_PROFILE\0. بيانات إدارة الألوان. وقد تتوزع على عدة علامات APP2. وعادة ما يكون الإبقاء عليه آمنًا.

APP13 (0xFFED):IPTC/Photoshop

المعرّف: Photoshop 3.0\0. يحتوي على بيانات IPTC-IIM فيها العناوين التوضيحية والكلمات المفتاحية وحقوق النشر ومعلومات المنشئ. وقد يتضمن معلومات عن المؤلف.

APP14 (0xFFEE):Adobe

المعرّف: Adobe\0. يحتوي على رايات تحويل الألوان (RGB/CMYK). وهو مهم لعرض الألوان عرضًا صحيحًا.

بنية EXIF

هنا يصبح الأمر مثيرًا (وغريبًا بعض الشيء). فبيانات EXIF هي في الحقيقة ملف TIFF صغير مدمج داخل ملف JPEG. نعم، حرفيًا. له ترويسته الخاصة، وترتيب بايتاته الخاص، ويستخدم بنية IFD (Image File Directory) من TIFF لتخزين الوسوم.

وأول ما تراه بعد المعرّف "Exif" هو ترويسة TIFF تخبرك إن كانت البيانات little-endian (إنتل، "II") أم big-endian (موتورولا، "MM"). والخطأ هنا يعني أن كل الأرقام ستخرج مشوّهة، ولذلك فهو أول ما يتحقق منه أي محلّل.

ترويسة TIFF (8 بايتات)

ترتيب البايتات (II = little-endian)
الرقم السحري (42)
إزاحة IFD0
OffsetHexASCII
0000
49492A0008000000
II*.....

II = إنتل (little-endian)، MM = موتورولا (big-endian)

بنية مدخل IFD (12 بايتًا)

معرّف الوسمالنوعالعددالقيمة/الإزاحة
2 بايت2 بايت4 بايت4 بايت

أبرز مدخلات IFD

0x010F:Make
0x0110:Model
0x0132:DateTime
0x8769:ExifIFDPointer
0x8825:GPSInfoIFDPointer
0x927C:MakerNote

كيف يعالج PicScrub ملفات JPEG

الأسلوب مباشر إلى حد بعيد: نقرأ الملف علامة بعد علامة، فنبقي على ما هو ضروري لعرض الصورة ونتخطى ما يحمل بيانات وصفية. وبما أننا لا نمس بيانات الصورة المضغوطة إطلاقًا، فلا فقدان للجودة على الإطلاق.

والمفتاح هنا أن بنية JPEG القائمة على العلامات تجعل الأمر سهلًا. فلسنا بحاجة إلى فهم معاملات DCT ولا جداول هوفمان، بل يكفي أن نميّز أي المقاطع بيانات وصفية وأيها ليس كذلك.

1

التحقق من الترويسة

التأكد من وجود علامة SOI (FF D8) في بداية الملف

2

تحليل العلامات

قراءة كل علامة بالترتيب واستخراج نوعها وطولها

3

تحديد البيانات الوصفية

فحص معرّفات مقاطع APP (مثل EXIF وXMP وIPTC وغيرها)

4

النسخ الانتقائي

نسخ المقاطع غير الوصفية إلى الناتج، وتخطي مقاطع البيانات الوصفية

ما الذي يبقى

  • • علامتا SOI/EOI (إلزاميتان)
  • • DQT (جداول التكميم)
  • • SOF (ترويسة الإطار)
  • • DHT (جداول هوفمان)
  • • SOS وبيانات المسح (الصورة نفسها)
  • • اختياري: ملف الألوان ICC (قابل للضبط)

ما الذي يُزال

  • • APP1 EXIF (الكاميرا وGPS والطوابع الزمنية)
  • • APP1 XMP (بيانات التحرير الوصفية)
  • • APP13 IPTC (العناوين التوضيحية والمؤلف)
  • • علامات COM (التعليقات)
  • • الصور المصغّرة في EXIF

مرجع وسوم EXIF

ليست كل وسوم EXIF سواء من حيث الخصوصية. فبعضها، مثل إعدادات التعريض، غير مؤذٍ إلى حد بعيد. وبعضها الآخر، مثل الأرقام التسلسلية وأسماء المالكين، قد يكشف هويتك أو هوية معداتك بلا لبس. وهذه هي الوسوم التي نعدّها عالية الخطورة:

معرّف الوسمالاسمخطر الخصوصية
0x9003DateTimeOriginalمرتفع
0x9004DateTimeDigitizedمرتفع
0x9010OffsetTimeمتوسط
0x9286UserCommentمرتفع
0x927CMakerNoteمرتفع
0xA420ImageUniqueIDمرتفع
0xA430CameraOwnerNameمرتفع
0xA431BodySerialNumberمرتفع
0xA434LensModelمتوسط
0xA435LensSerialNumberمرتفع
0xFDE8OwnerNameمرتفع
0xFDE9SerialNumberمرتفع
عرض كل وسوم إعدادات الكاميرا (غير الكاشفة للهوية)
0x829A ExposureTime
0x829D FNumber
0x8822 ExposureProgram
0x8827 ISOSpeedRatings
0x9201 ShutterSpeedValue
0x9202 ApertureValue
0x9203 BrightnessValue
0x9204 ExposureBiasValue
0x9207 MeteringMode
0x9208 LightSource
0x9209 Flash
0x920A FocalLength
0xA001 ColorSpace
0xA002 PixelXDimension
0xA003 PixelYDimension
0xA402 ExposureMode
0xA403 WhiteBalance
0xA405 FocalLengthIn35mmFilm
0xA406 SceneCaptureType

مرجع وسوم GPS

تسكن بيانات GPS في IFD فرعي خاص بها، يشير إليه الوسم 0x8825 في الـ IFD الرئيسي. فإن وُجد هذا المؤشر، فهناك بيانات موقع في صورتك. وهواتف اليوم الذكية شديدة الحماس في تضمين هذه البيانات، وغالبًا بدقة تكفي لتحديد المكان الذي كنت واقفًا فيه بالضبط.

معرّف الوسمالاسمالوصف
0x0000GPSVersionIDإصدار وسوم GPS
0x0001GPSLatitudeRefN أو S
0x0002GPSLatitudeدرجات ودقائق وثوانٍ
0x0003GPSLongitudeRefE أو W
0x0004GPSLongitudeدرجات ودقائق وثوانٍ
0x0005GPSAltitudeRefفوق مستوى سطح البحر أو تحته
0x0006GPSAltitudeبالأمتار
0x0007GPSTimeStampالتوقيت بحسب UTC
0x001DGPSDateStampالتاريخ بحسب UTC
0x0012GPSMapDatumالمرجع الجيوديسي المستخدم
0x001BGPSProcessingMethodGPS/CELLID/WLAN/MANUAL
0x001CGPSAreaInformationاسم المكان

مرجع وسوم IPTC

صُمّم معيار IPTC ليتيح لوكالات الأنباء تضمين العناوين التوضيحية والاعتمادات ومعلومات حقوق النشر. ويُخزَّن داخل APP13 بمعرّف "Photoshop 3.0" (نعم، تبنّته Adobe). فإن سبق أن أضفت معلومات حقوق نشر أو كلمات مفتاحية في Lightroom أو Photoshop، فهنا ينتهي بها المطاف.

0x0250 By-line (المؤلف)
0x0255 By-line Title (صفة المؤلف)
0x025A City (المدينة)
0x025C Sub-location (الموقع التفصيلي)
0x025F Province/State (المحافظة أو الولاية)
0x0265 Country Name (البلد)
0x0274 Copyright Notice (إشعار حقوق النشر)
0x0276 Contact (جهة الاتصال)
0x0237 Date Created (تاريخ الإنشاء)
0x023C Time Created (وقت الإنشاء)
0x0278 Caption/Abstract (العنوان التوضيحي)
0x0219 Keywords (الكلمات المفتاحية)