في المنشور السابق ، ناقشنا كيفية التعامل مع بيانات EXIF للصور في Java. هنا ، سننظر اليوم في تحقيق نفس الشيء ولكن في C #. إذا لم تقم بزيارة آخر مشاركة ، ولكنك تريد استخراج بيانات EXIF من صورك أو تحديثها أو إضافتها أو إزالتها برمجيًا في C # ، فستوجهك هذه المقالة خلال هذا الأمر. سنغطي الطرق التالية للتلاعب ببيانات EXIF في C #:

إدارة البيانات الوصفية مكتبة C

Metadata .NET API بواسطة GroupDocs

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

في هذه المقالة ، سنستخدم واجهة برمجة التطبيقات هذه ، لذا يرجى التأكد من تنزيل ثنائياتها أو تثبيت واجهة برمجة التطبيقات من NuGet.

قراءة بيانات EXIF من الصور في C

يمكنك بسهولة قراءة خصائص بيانات EXIF باتباع الخطوات المذكورة. بدءًا من استخراج بيانات EXIF من هذه الصورة ، يبلغ ارتفاع تمثال الحرية 93 مترًا. سنستخدم هنا ملف JPG كصورة نموذجية ، ومع ذلك ، يمكننا استخدام أي ملف سواء كان PNG أو WebP أو BMP أو GIF أو TIFF أو أي ملف آخر من تنسيقات الملفات المدعومة المذكورة في نهاية هذه المقالة.

صورة Liberty JPG لبيانات EXIF
  • قم بتحميل ملف مصدر الصورة الذي يحتوي على معلومات بيانات EXIF باستخدام مُنشئ الفئة البيانات الوصفية.
  • احصل على حزمة الجذر عن طريق استدعاء طريقة GetRootPackage ().
  • من حزمة الجذر ، احصل على ExifPackage من ExifPackage property.
  • بمجرد حصولك على حزمة EXIF ، يمكنك الآن الوصول إلى خصائص EXIF للصورة ؛ مثل Make ، Model ، Width ، Length ، DateTime ، حقوق الطبع والنشر ، البرنامج ، إلخ كما هو موضح أدناه في مثال رمز C #.
// Extract EXIF Data Package Information from image in C#
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null && root.ExifPackage != null)
    {
        Console.WriteLine(root.ExifPackage.Make);
        Console.WriteLine(root.ExifPackage.Model);
        Console.WriteLine(root.ExifPackage.ImageWidth);
        Console.WriteLine(root.ExifPackage.ImageLength);
        Console.WriteLine(root.ExifPackage.DateTime);
     }
}

سيعرض الكود أعلاه معلومات EXIF المتوفرة التالية لصورة JPG المقدمة.

Make : NIKON CORPORATION
Model : NIKON D7200 
Width : 640
Length : 384
DateTime : 2018:07:06 19:31:05

قراءة معلومات EXIF IFD و GPS للصورة

تتضمن بيانات EXIF أيضًا معلومات Exif IFD (دليل ملفات الصور) و GPS (نظام تحديد المواقع العالمي). الآن بالنسبة لمعلومات حزمة IFD و GPS ، عليك فقط الوصول إلى الخصائص الخاصة بحزمة EXIF مثل ExifIfdPackage أو GpsPackage. من هذه الحزم ، يمكنك استخراج معلومات أكثر بكثير مما هو مذكور أدناه:

  • الرقم التسلسلي للجهاز
  • اسم مالك الكاميرا
  • نمط CFA
  • سرعة
  • اتجاه الصورة
  • ملصق التاريخ
  • معلومات المنطقة
  • ارتفاع
  • خط العرض
  • خط الطول
  • إلخ.

يمكن إضافة الكود المذكور أدناه في طريقتك أعلاه لعرض بيانات EXIF جنبًا إلى جنب مع معلومات IFD و GPS.

// Display EXIF IFD Package Properties like Serial Number and Camera Owner.
Console.WriteLine(root.ExifPackage.ExifIfdPackage.BodySerialNumber);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.CameraOwnerName);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.UserComment);
// Display EXIF GPS Information like Latitude, Longitude, etc.
Console.WriteLine(root.ExifPackage.GpsPackage.Altitude);
Console.WriteLine(root.ExifPackage.GpsPackage.LatitudeRef);
Console.WriteLine(root.ExifPackage.GpsPackage.LongitudeRef);

قراءة جميع علامات EXIF للصور في C

يمكنك استخراج جميع خصائص EXIF لأي صورة ، ويمكنك القيام بذلك بطريقة مشابهة تقريبًا كما هو مذكور أعلاه:

  • قم بتحميل الصورة باستخدام مُنشئ البيانات الوصفية.
  • احصل على حزمة الجذر عن طريق استدعاء الأسلوب GetRootPackage ().
  • احصل على حزمة EXIF من خاصية ExifPackage من الحزمة الجذر.
  • كرر حزمة EXIF واحصل على أزواج الاسم والقيمة المطلوبة.
  • وبالمثل ، احصل على حزم IFD و GPS لعرض مفاتيحها وقيمها.
// Extract all EXIF Metadata from the image
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null && root.ExifPackage != null)
    {
        const string pattern = "{0} = {1}";
        // Read all EXIF Package Tags and values.
        foreach (TiffTag tag in root.ExifPackage.ToList()) {
            Console.WriteLine(pattern, tag.Name, tag.Value);
        }
        // Read all EXIF IFD Package Tags and values.
        foreach (TiffTag tag in root.ExifPackage.ExifIfdPackage.ToList()) {
            Console.WriteLine(pattern, tag.Name, tag.Value);
        }
         // Read all EXIF GPS Package Tags and values.
        foreach (TiffTag tag in root.ExifPackage.GpsPackage.ToList()) {
            Console.WriteLine(pattern, tag.Name, tag.Value);
        }
    }
}

تحديث خصائص EXIF في C

يمكنك تغيير بيانات EXIF الموجودة لأي صورة بسهولة. فيما يلي الخطوات التي يمكنك اتباعها:

تحديث حزمة EXIF

  • احصل على حزمة الجذر عن طريق استدعاء الأسلوب GetRootPackage ().
  • قم بتعيين خصائص ExifPackage عن طريق تعيين القيم الجديدة للخصائص المقابلة مثل تعيين قيمة جديدة إلى:
    • root.ExifPackage.Copyright - لضبط معلومات حقوق النشر المحدثة.
  • وبالمثل ، يمكنك تعيين قيم الفنان ، والطراز ، والبرنامج ، وعرض الصورة وارتفاعها ، و DateTime ، وما إلى ذلك.

تحديث حزمة EXIF IFD

على غرار خصائص الإعداد لحزمة EXIF ، يمكننا تحديث خصائص حزم EXIF IFD و GPS.

  • قم بتعيين قيمة إلى root.ExifPackage.ExifIfdPackage.CameraOwnerName لتعيين مالك الكاميرا.

يمكنك زيارة ExifIfdPackage أو ExifGpsPackage للحصول على فكرة عن مقدار ما يمكنك تخصيصه لصورك.

// Update or change new values in EXIF Data (EXIF Package & EXIF IFD Package).
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null)
    {
        // Set the EXIF package if it is missing
        if (root.ExifPackage == null) {
            root.ExifPackage = new ExifPackage();
        }
       // Setting the desired values in EXIF Package and EXIF IFD Package.
        root.ExifPackage.Copyright = "Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.";
        root.ExifPackage.ImageDescription = "Statue of Liberty for EXIF Data";
        root.ExifPackage.Software = "GroupDocs.Metadata for .NET"; 
        root.ExifPackage.ExifIfdPackage.BodySerialNumber = "GD-2020";
        root.ExifPackage.ExifIfdPackage.CameraOwnerName = "GroupDocs";
        root.ExifPackage.ExifIfdPackage.UserComment = "Nice image captured in 2018";
        metadata.Save("statue-of-liberty-updated.jpg");
    }
}

إزالة EXIF Metadata من الصور في C

إذا كنت ترغب في إزالة حزمة EXIF من أي ملف ، فقم فقط بتعيين خاصية ExifPackage الخاصة بها على خالية.

// Removing the EXIF data from an image.
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null)
    {
        root.ExifPackage = null;
        metadata.Save("statue-of-liberty-no-exif.jpg");
    }
}

الصور المدعومة والتنسيقات الأخرى

هذه هي تنسيقات الملفات المدعومة حاليًا بواسطة GroupDocs.Metadata لمعلومات بيانات EXIF للصور والتسجيلات الصوتية ومقاطع الفيديو. يمكنك دائمًا زيارة الوثائق للحصول على المعلومات المحدثة.

نوع الوثيقة تنسيقات الملفات
الصور BMP ، GIF ، JPG ، JPEG ، JPE ، JP2 ، PNG ، DJVU ، DWG ، DXF ، WebP ، TIFF ، PSD ، EMF ، WMF
الصوت والفيديو MP3 ، WAV ، AVI ، MOV / QT ، FLV ، ASF ، DICOM

اطلع على المزيد حول GroupDocs.Metadata

لنتحدث أكثر في @ منتدى الدعم المجاني.

مقالات لها صلة