JPEG
الأكثر تسريبًايحمل ملف JPEG بياناته الوصفية في مقاطع APPn بين ترويسة الملف وبيانات الصورة. وإليك ما يسكن في كل جزء، وما يفعله PicScrub بكل منها.
ما الذي يُزال
- EXIF إحداثيات GPS، وعلامة الكاميرا وطرازها، والطوابع الزمنية، وإعدادات التعريض
- XMP سجل التحرير، والبرنامج المستخدم، والتقييمات
- IPTC / Photoshop العناوين التوضيحية، والاعتمادات، والكلمات المفتاحية
- التعليقات والصور المصغّرة المدمجة نسخة صغيرة من الأصل قد تنجو من كل قصّ وتعديل تجريه
ما الذي يمكنك الإبقاء عليه
- بيانات الصورة سليمة دائمًا، ولا يُعاد ترميزها أبدًا
- ملف الألوان ICC اختياري، كي تبقى الألوان دقيقة
- الاتجاه اختياري، كي تبقى الصور الطولية معتدلة
- إشعار حقوق النشر اختياري، لمن يريد نسب الصورة إليه دون الكشف عن إحداثياته
نظرة عامة على بنية الملف
إن سبق أن فتحت ملف JPEG في محرر ست عشري، فستلاحظ أنه مؤلف من مقاطع تفصل بينها علامات. وكل علامة تبدأ بـ 0xFF يليه بايت يخبرك بنوع المقطع. وهذا التصميم يجعل تحليل ملفات JPEG سهلًا نسبيًا: يكفي أن تبحث عن بايتات FF وتفحص ما يليها.
والجانب المهم للخصوصية هو أن البيانات الوصفية كلها (EXIF وGPS والطوابع الزمنية) تسكن في هذه المقاطع، منفصلة تمامًا عن بيانات الصورة الفعلية. ولذلك نستطيع إزالة البيانات الوصفية دون المساس بالبكسلات ودون إعادة ضغط أي شيء.
بنية ملف JPEG
مثال على ترويسة JPEG
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | FFD8FFE000104A464946000101000048 | ......JFIF.....H | |||||||||||||||
| 0010 | 00480000FFE112344578696600000000 | .H.....4Exif.. | |||||||||||||||
بنية العلامة
FF xx:العلامة (وxx يحدد نوعها)LL LL:الطول (بايتان، big-endian، ويشمل نفسه)Data...:بيانات المقطع (الطول - 2 بايت)
مرجع كامل لعلامات JPEG
| العلامة | الاسم | الوصف |
|---|---|---|
| FF D8 | SOI | بداية الصورة |
| FF D9 | EOI | نهاية الصورة |
| FF C0 | SOF0 | بداية الإطار (DCT أساسي) |
| FF C2 | SOF2 | بداية الإطار (DCT تدريجي) |
| FF C4 | DHT | تعريف جدول هوفمان |
| FF DB | DQT | تعريف جدول التكميم |
| FF DD | DRI | تعريف فترة إعادة التشغيل |
| FF DA | SOS | بداية المسح (تليها بيانات الصورة) |
| FF FE | COM | تعليق (بيانات وصفية) |
| FF E0 | APP0 | علامة JFIF |
| FF E1 | APP1 | علامة EXIF / XMP |
| FF E2 | APP2 | ملف ICC / MPF |
| FF ED | APP13 | IPTC / Photoshop |
| FF EE | APP14 | تحويل ألوان 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 بايتات)
| Offset | Hex | ASCII | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 0000 | 49492A0008000000 | II*..... | |||||||
II = إنتل (little-endian)، MM = موتورولا (big-endian)
بنية مدخل IFD (12 بايتًا)
أبرز مدخلات IFD
0x010F:Make0x0110:Model0x0132:DateTime0x8769:ExifIFDPointer0x8825:GPSInfoIFDPointer0x927C:MakerNoteكيف يعالج PicScrub ملفات JPEG
الأسلوب مباشر إلى حد بعيد: نقرأ الملف علامة بعد علامة، فنبقي على ما هو ضروري لعرض الصورة ونتخطى ما يحمل بيانات وصفية. وبما أننا لا نمس بيانات الصورة المضغوطة إطلاقًا، فلا فقدان للجودة على الإطلاق.
والمفتاح هنا أن بنية JPEG القائمة على العلامات تجعل الأمر سهلًا. فلسنا بحاجة إلى فهم معاملات DCT ولا جداول هوفمان، بل يكفي أن نميّز أي المقاطع بيانات وصفية وأيها ليس كذلك.
التحقق من الترويسة
التأكد من وجود علامة SOI (FF D8) في بداية الملف
تحليل العلامات
قراءة كل علامة بالترتيب واستخراج نوعها وطولها
تحديد البيانات الوصفية
فحص معرّفات مقاطع APP (مثل EXIF وXMP وIPTC وغيرها)
النسخ الانتقائي
نسخ المقاطع غير الوصفية إلى الناتج، وتخطي مقاطع البيانات الوصفية
ما الذي يبقى
- • علامتا SOI/EOI (إلزاميتان)
- • DQT (جداول التكميم)
- • SOF (ترويسة الإطار)
- • DHT (جداول هوفمان)
- • SOS وبيانات المسح (الصورة نفسها)
- • اختياري: ملف الألوان ICC (قابل للضبط)
ما الذي يُزال
- • APP1 EXIF (الكاميرا وGPS والطوابع الزمنية)
- • APP1 XMP (بيانات التحرير الوصفية)
- • APP13 IPTC (العناوين التوضيحية والمؤلف)
- • علامات COM (التعليقات)
- • الصور المصغّرة في EXIF
مرجع وسوم EXIF
ليست كل وسوم EXIF سواء من حيث الخصوصية. فبعضها، مثل إعدادات التعريض، غير مؤذٍ إلى حد بعيد. وبعضها الآخر، مثل الأرقام التسلسلية وأسماء المالكين، قد يكشف هويتك أو هوية معداتك بلا لبس. وهذه هي الوسوم التي نعدّها عالية الخطورة:
| معرّف الوسم | الاسم | خطر الخصوصية |
|---|---|---|
| 0x9003 | DateTimeOriginal | مرتفع |
| 0x9004 | DateTimeDigitized | مرتفع |
| 0x9010 | OffsetTime | متوسط |
| 0x9286 | UserComment | مرتفع |
| 0x927C | MakerNote | مرتفع |
| 0xA420 | ImageUniqueID | مرتفع |
| 0xA430 | CameraOwnerName | مرتفع |
| 0xA431 | BodySerialNumber | مرتفع |
| 0xA434 | LensModel | متوسط |
| 0xA435 | LensSerialNumber | مرتفع |
| 0xFDE8 | OwnerName | مرتفع |
| 0xFDE9 | SerialNumber | مرتفع |
عرض كل وسوم إعدادات الكاميرا (غير الكاشفة للهوية)
0x829A ExposureTime0x829D FNumber0x8822 ExposureProgram0x8827 ISOSpeedRatings0x9201 ShutterSpeedValue0x9202 ApertureValue0x9203 BrightnessValue0x9204 ExposureBiasValue0x9207 MeteringMode0x9208 LightSource0x9209 Flash0x920A FocalLength0xA001 ColorSpace0xA002 PixelXDimension0xA003 PixelYDimension0xA402 ExposureMode0xA403 WhiteBalance0xA405 FocalLengthIn35mmFilm0xA406 SceneCaptureTypeمرجع وسوم GPS
تسكن بيانات GPS في IFD فرعي خاص بها، يشير إليه الوسم 0x8825 في الـ IFD الرئيسي. فإن وُجد هذا المؤشر، فهناك بيانات موقع في صورتك. وهواتف اليوم الذكية شديدة الحماس في تضمين هذه البيانات، وغالبًا بدقة تكفي لتحديد المكان الذي كنت واقفًا فيه بالضبط.
| معرّف الوسم | الاسم | الوصف |
|---|---|---|
| 0x0000 | GPSVersionID | إصدار وسوم GPS |
| 0x0001 | GPSLatitudeRef | N أو S |
| 0x0002 | GPSLatitude | درجات ودقائق وثوانٍ |
| 0x0003 | GPSLongitudeRef | E أو W |
| 0x0004 | GPSLongitude | درجات ودقائق وثوانٍ |
| 0x0005 | GPSAltitudeRef | فوق مستوى سطح البحر أو تحته |
| 0x0006 | GPSAltitude | بالأمتار |
| 0x0007 | GPSTimeStamp | التوقيت بحسب UTC |
| 0x001D | GPSDateStamp | التاريخ بحسب UTC |
| 0x0012 | GPSMapDatum | المرجع الجيوديسي المستخدم |
| 0x001B | GPSProcessingMethod | GPS/CELLID/WLAN/MANUAL |
| 0x001C | GPSAreaInformation | اسم المكان |
مرجع وسوم 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 (الكلمات المفتاحية)