EXIF (تنسيق ملف الصورة القابل للتبديل) هو المعيار لتحديد تنسيقات الصور والصوت المستخدمة بشكل أساسي بواسطة الكاميرات الرقمية والماسحات الضوئية. تتضمن بيانات EXIF معلومات العلامات والبيانات الوصفية حول ملف الصورة الملتقطة. قد تحتوي البيانات الوصفية على معلومات مثل صنع الكاميرا ، والطراز ، وسرعة الغالق ، والتاريخ والوقت ، وفتحة العدسة ، ووقت التعرض ، ودقة X ، ودقة Y. إلخ.

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

مكتبة معالجة البيانات الوصفية لجافا

Metadata Java API بواسطة GroupDocs

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

أنا أستخدم واجهة برمجة التطبيقات هذه في هذه المقالة ، لذا يرجى التأكد من تنزيل أو دمجها في التطبيقات المستندة إلى Maven عن طريق إضافة التكوينات التالية إلى ملف pom.xml.

المستودع والتبعية

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-metadata</artifactId>
    <version>20.5</version>
    <classifier>javadoc</classifier>
</dependency>

استخراج بيانات EXIF من الصور في Java - عارض البيانات الوصفية

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

صورة برج إيفل لبيانات EXIF
  • قم بتحميل ملف مصدر الصورة الذي يحتوي على معلومات بيانات EXIF باستخدام مُنشئ الفئة البيانات الوصفية.
  • احصل على حزمة الجذر عن طريق استدعاء طريقة getRootPackage ().
  • من حزمة الجذر ، احصل على حزمة EXIF الخاصة بها عن طريق استدعاء طريقة getExifPackage ().
  • بمجرد حصولك على حزمة EXIF ، يمكنك الحصول على خصائص EXIF للصورة مثل Make ، Model ، Width ، Length ، Date-Time ، إلخ كما هو موضح في مثال كود Java أدناه.
// Extract EXIF Data Package Information from image in Java
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
	IExif root = (IExif) metadata.getRootPackage();
	if (root.getExifPackage() != null) {
		// Extract EXIF Package
		ExifPackage exifPackage = root.getExifPackage();
		System.out.println("Make : " + exifPackage.getMake());
		System.out.println("Model : " + exifPackage.getModel());
		System.out.println("Width : " + exifPackage.getImageWidth());
		System.out.println("Length : " + exifPackage.getImageLength());
		System.out.println("DateTime : " + exifPackage.getDateTime());					
	} 
}

إليك معلومات EXIF التي ستحصل عليها نتيجة للكود أعلاه.

Make : NIKON CORPORATION
Model : NIKON D3000
Width : 640
Length : 424
DateTime : 2014:08:09 10:35:13

لمزيد من معلومات حزمة IFD (دليل ملفات الصور) و GPS (نظام تحديد المواقع العالمي) ، عليك فقط استدعاء الأساليب الخاصة بحزمة EXIF مثل getExifIfdPackage () أو getGpsPackage (). من هذه الحزم ، يمكنك استخراج المزيد من المعلومات مثل ؛

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

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

// EXIF IFD Package
ExifIfdPackage exifIfdPackage = exifPackage.getExifIfdPackage();
System.out.println("BodySerialNumber : " + exifIfdPackage.getBodySerialNumber());
System.out.println("CameraOwnerName : " + exifIfdPackage.getCameraOwnerName());
System.out.println("UserComment : " + exifIfdPackage.getUserComment());
// EXIF GPS Information Package
ExifGpsPackage exifGpsPackage = exifPackage.getGpsPackage();
System.out.println("getAltitude : " + exifGpsPackage.getAltitude());
System.out.println("Latitude Ref : " + exifGpsPackage.getLatitudeRef());
System.out.println("LongitudeRef : " + exifGpsPackage.getLongitudeRef());

اقرأ جميع علامات EXIF للصور باستخدام Java

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

  • ما عليك سوى تحميل الملف باستخدام مُنشئ Metadata.
  • احصل على حزمة الجذر EXIF باستدعاء الطريقة getRootPackage ().
  • احصل على حزمة EXIF باستدعاء طريقة getExifPackage ().
  • كرر حزمة EXIF للحصول على أزواج الاسم والقيمة التي تريدها.
  • وبالمثل ، احصل على حزم IFD و GPS واعرض مفاتيحها وقيمها.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
	IExif root = (IExif) metadata.getRootPackage();
	if (root.getExifPackage() != null) {
		String pattern = "%s = %s";
		// Reading all EXIF tags.
		for (TiffTag tag : root.getExifPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
		// Extract all EXIF IFD tags.
		for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
		// Extract all EXIF GPS tags
		for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
	}
}

قم بتحديث خصائص EXIF في Java

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

تحديث حزمة EXIF

  • احصل على حزمة EXIF باستدعاء طريقة getExifPackage ().
  • استخدم طرق الإعداد مثل ؛
  • وبالمثل ، يمكنك تعيين قيم الفنان ، والإنشاء ، والطراز ، والبرنامج ، وعرض الصورة والارتفاع ، والتاريخ ، والوقت ، وما إلى ذلك.

تحديث حزمة EXIF IFD

تمامًا مثل تحديث حزمة EXIF ، يمكنك تحديث خصائص حزم EXIF IFD و GPS. يرجى زيارة فئة ExifIfdPackage أو ExifGpsPackage لمعرفة مقدار ما يمكنك تخصيصه لصورك ومستنداتك القيمة.

// Update/Set new values in EXIF Data (EXIF Package and EXIF IFD Package).
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
    IExif root = (IExif) metadata.getRootPackage();
    // Set the EXIF package if it's missing
    if (root.getExifPackage() == null) {
        root.setExifPackage(new ExifPackage());
    }
    ExifPackage exifPackage = root.getExifPackage();
    // Setting the desired values in EXIF Package and EXIF IFD Package.
    exifPackage.setCopyright("Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.");
    exifPackage.setImageDescription("Eiffel Tower for EXIF");
    exifPackage.setSoftware("GroupDocs.Metadata");
    exifPackage.getExifIfdPackage().setBodySerialNumber("GD-2020");
    exifPackage.getExifIfdPackage().setCameraOwnerName("GroupDocs");
    exifPackage.getExifIfdPackage().setUserComment("Nice image captured in 2014");
    metadata.save("eiffel-tower-updated.jpg");
}

قم بإزالة EXIF Metadata من الصور في Java

هذا أمر بسيط للغاية إذا كنت تريد إزالة حزمة EXIF من أي ملف ، فقط اضبط حزمة EXIF الخاصة بها على null عن طريق استدعاء setExifPackage (null) من حزمة الجذر.

// Removing the EXIF data from an image.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
    IExif root = (IExif) metadata.getRootPackage();
    root.setExifPackage(null);
    metadata.save("eiffel-tower-no-exif.jpg");
}

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

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

نوع الوثيقة تنسيقات الملفات
الصور 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

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

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