در پست قبلی، نحوه برخورد با داده های EXIF تصاویر در Java را مورد بحث قرار دادیم. در اینجا، امروز ما به دنبال دستیابی به همان چیزی هستیم اما در C#. اگر از آخرین پست بازدید نکرده‌اید، اما می‌خواهید داده‌های EXIF تصاویر خود را به صورت برنامه‌نویسی در C# استخراج، به‌روزرسانی، اضافه یا حذف کنید، این مقاله شما را در این زمینه راهنمایی می‌کند. ما روش های زیر را برای دستکاری با داده های EXIF در C# پوشش خواهیم داد:

کتابخانه C# مدیریت فراداده

فراداده .NET API توسط GroupDocs

GroupDocs.Metadata for .NET یک API.NET مدیریت ابرداده است. این فهرست طولانی از ویژگی ها برای طیف گسترده ای از فرمت های فایل پشتیبانی شده دارد. این قابلیت نه تنها استخراج ابرداده از تصاویر را دارد، بلکه می‌تواند با گزینه‌های مختلف، متادیتا را از تصاویر و اسناد اضافه، ویرایش، به‌روزرسانی و حذف کند.

در این مقاله، ما از این API استفاده خواهیم کرد، بنابراین لطفاً مطمئن شوید که باینری های آن را دانلود کنید یا API را از NuGet نصب کنید.

خواندن داده های EXIF از تصاویر در C#

با انجام مراحل ذکر شده می توانید به راحتی ویژگی های داده EXIF را بخوانید. با استخراج داده های EXIF از این تصویر، مجسمه آزادی 93 متری شروع شد. در اینجا ما از یک فایل JPG به عنوان نمونه تصویر استفاده خواهیم کرد، با این حال، می‌توانیم از هر فایلی استفاده کنیم، خواه PNG، WebP، BMP، GIF، TIFF یا هر فایل دیگری از [فرمت‌های فایل پشتیبانی شده11 که در پایان ذکر شد. این مقاله.

تصویر JPG آزادی برای داده های EXIF
  • فایل منبع تصویر حاوی اطلاعات داده EXIF را با استفاده از سازنده کلاس Metadata بارگیری کنید.
  • بسته ریشه آن را با فراخوانی روش GetRootPackage() دریافت کنید.
  • از بسته ریشه، ExifPackage آن را از ویژگی ExifPackage دریافت کنید.
  • هنگامی که بسته EXIF را دارید، اکنون می توانید به ویژگی های EXIF تصویر دسترسی داشته باشید. مانند Make، Model، Width، Length، DateTime، Copyright، Software و غیره همانطور که در مثال کد 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 (Image File Directory) و GPS (Global Positioning System) است. اکنون برای اطلاعات بسته 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 هر تصویر را استخراج کنید، می توانید این کار را به روشی تقریباً مشابه بالا انجام دهید:

  • تصویر را با سازنده Metadata بارگیری کنید.
  • بسته root را با فراخوانی متد 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 را به روز کنید

  • بسته root را با فراخوانی متد GetRootPackage() دریافت کنید.
  • ویژگی های ExifPackage را با اختصاص مقادیر جدید به ویژگی های مربوطه مانند تعیین مقدار جدید به:
    • root.ExifPackage.Copyright - برای تنظیم اطلاعات به روز شده حق چاپ.
  • به طور مشابه، می توانید مقادیر هنرمند، ساخت، مدل، نرم افزار، عرض و ارتفاع تصویر، تاریخ و غیره را تنظیم کنید.

بسته 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 از تصاویر در C#

اگر می خواهید بسته EXIF را از هر فایلی حذف کنید، فقط ویژگی ExifPackage آن را null کنید.

// 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 بیشتر ببینید

بیایید بیشتر صحبت کنیم @ تالار گفتمان پشتیبانی رایگان.

مقاله مرتبط