كيفية الحصول على بيانات EXIF ​​من ملف باستخدام C# [مغلق]

StackOverflow https://stackoverflow.com/questions/58649

  •  09-06-2019
  •  | 
  •  

سؤال

أرغب في كتابة برنامج صغير بلغة C# والذي يمر عبر صور jpeg الخاصة بي، وعلى سبيل المثال، يصنفها في مجلدات مؤرخة (باستخدام اصطلاحات المواعدة الخاصة بي، اللعنة...).

هل يعرف أي شخص طريقة سهلة نسبيًا للحصول على بيانات EXIF ​​مثل التاريخ والوقت أو التعرض برمجيًا؟شكرًا!

هل كانت مفيدة؟

المحلول

ألق نظرة على هذا مستخرج البيانات الوصفية. إنه مكتوب بلغة Java ولكن تم نقله أيضًا إلى C#. لقد استخدمت إصدار Java لكتابة أداة مساعدة صغيرة لإعادة تسمية ملفات jpeg الخاصة بي بناءً على علامات التاريخ والطراز.سهل الاستخدام للغاية.


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

وهو يدعم بشكل كامل Exif، بالإضافة إلى IPTC وXMP والعديد من أنواع البيانات الوصفية الأخرى من أنواع الملفات بما في ذلك JPEG وPNG وGIF وPNG وICO وWebP وPSD و...

var directories = ImageMetadataReader.ReadMetadata(imagePath);

// print out all metadata
foreach (var directory in directories)
foreach (var tag in directory.Tags)
    Console.WriteLine($"{directory.Name} - {tag.Name} = {tag.Description}");

// access the date time
var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);

إنه متاح عبر نوجيت و ال الكود على جيثب.

نصائح أخرى

كما هو مقترح، يمكنك استخدام بعض مكتبات الطرف الثالث، أو القيام بذلك يدويًا (وهو أمر لا يتطلب الكثير من العمل)، ولكن الأبسط والأكثر مرونة هو ربما استخدام الوظيفة المضمنة في .NET.للمزيد انظر:

أقول "إنه الأكثر مرونة" لأن .NET لا يحاول تفسير البيانات أو دمجها بأي شكل من الأشكال.لكل EXIF ​​تحصل بشكل أساسي على مجموعة من البايتات.قد يكون هذا جيدًا أو سيئًا اعتمادًا على مقدار التحكم الذي تريده بالفعل.

ويجب أن أشير أيضًا إلى أن قائمة الخصائص لا تتوافق بشكل مباشر مع قيم EXIF.يتم تخزين ملف EXIF ​​نفسه في جداول متعددة بمعرفات متداخلة، لكن .NET يضع كل شيء في قائمة واحدة ويعيد تعريف معرفات بعض العناصر.ولكن طالما أنك لا تهتم بمعرفات EXIF ​​الدقيقة، فيجب أن تكون على ما يرام مع تعيين .NET.

هنا رابط لآخر سؤال SO مماثل, ، والذي يحتوي على إجابة تشير إلى هذه المقالة الجيدة "القراءة والكتابة والبيانات الوصفية للصور" في الشباك.

يمكنك استخدام تاجليب # والذي تستخدمه تطبيقات مثل إف سبوت.إلى جانب Exif، فإنه سيقرأ كمية لا بأس بها من تنسيقات البيانات الوصفية للصور والصوت والفيديو.

أحب أيضا com.exifUtils API ولكنها عربات التي تجرها الدواب ولم يتم تطويرها بشكل نشط.

تحتوي فئة الصورة على خصائص PropertyItems وPropertyIdList.يمكنك استخدامها.

يتضمن الحصول على بيانات EXIF ​​من صورة JPEG ما يلي:

  1. البحث عن علامات JPEG التي تشير إلى بداية بيانات EXIF.على سبيل المثالعادةً ما تكون oxFFE1 هي العلامة التي يتم إدخالها أثناء تشفير بيانات EXIF، وهي عبارة عن مقطع تطبيق، حيث تنتقل بيانات EXIF.
  2. تحليل جميع البيانات من 0xFFE1 إلى 0xFFE2 على سبيل المثال.ستكون هذه البيانات عبارة عن دفق من البايتات في ملف JPEG المشفر.
  3. قد يحتوي مكافئ ASCII لهذه البايتات على معلومات متنوعة تتعلق بتاريخ الصورة واسم طراز الكاميرا والتعرض وما إلى ذلك...

أداة سطر الأوامر ExifTool بواسطة فيل هارفي يعمل مع العشرات من تنسيقات الصور - بما في ذلك الكثير من تنسيقات RAW الخاصة - ويمكنه التعامل مع مجموعة متنوعة من تنسيقات البيانات الوصفية بما في ذلك EXIF، وGPS، وIPTC، وXMP، وJFIF.

سهل الاستخدام للغاية، خفيف الوزن، تطبيق مثير للإعجاب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top