هل هناك طريقة لاستنتاج تنسيق الصورة للملف، دون قراءة الملف بأكمله؟
سؤال
هل هناك طريقة جيدة لمعرفة تنسيق الصورة، دون الحاجة إلى قراءة الملف بأكمله في الذاكرة؟
من الواضح أن هذا سيختلف من تنسيق إلى آخر (أنا مهتم بشكل خاص بملفات TIFF) ولكن ما نوع الإجراء الذي قد يكون مفيدًا لتحديد نوع تنسيق الصورة للملف دون الحاجة إلى قراءة الملف بأكمله؟
علاوة:ماذا لو كانت الصورة عبارة عن سلسلة مشفرة بـ Base64؟هل هناك طريقة موثوقة لاستنتاجها قبل فك تشفيرها؟
المحلول
تحتوي معظم تنسيقات ملفات الصور على وحدات بايت فريدة في البداية.يونكس file
ينظر الأمر إلى بداية الملف لمعرفة نوع البيانات التي يحتوي عليها.راجع مقالة ويكيبيديا على الأرقام السحرية في الملفات و Magicdb.org.
نصائح أخرى
بالتأكيد هناك.كما ذكر الآخرون، تبدأ معظم الصور بنوع من "السحر"، والذي سيتم ترجمته دائمًا إلى نوع ما من بيانات Base64.فيما يلي بعض الأمثلة:
ستبدأ الصورة النقطية بـ Qk3
سيبدأ ملف Jpeg بـ /9j/
سيبدأ ملف GIF بـ R0l
(هذا صفر كالحرف الثاني).
وما إلى ذلك وهلم جرا.ليس من الصعب أخذ أنواع الصور المختلفة ومعرفة ما يتم تشفيرها.فقط كن حذرًا، حيث أن البعض لديه أكثر من قطعة سحرية واحدة، لذلك تحتاج إلى حسابها في "رمز الترجمة" B64 الخاص بك.
أيضاً file
في سطر الأوامر *nix أو قراءة البايتات الأولية للملف.تأتي معظم الملفات برأس فريد في البايتات القليلة الأولى.على سبيل المثال، يبدو رأس TIFF كما يلي:
0x00000000: 4949 2a00 0800 0000لمزيد من المعلومات حول تنسيق ملف TIFF على وجه التحديد إذا كنت تريد معرفة ما تمثله هذه البايتات، فانتقل هنا.
يتوفر موقع شامل لتنسيقات الملفات على:
ستبدأ ملفات TIFF إما بـ II أو MM (ترتيب بايت Intel أو Motorolla).
يمكن تنزيل مواصفات TIFF 6 هنا وليس من الصعب جدًا متابعته