EXIF (فرمت فایل تصویری قابل تعویض) استانداردی برای تعیین فرمت های تصویر و صدا است که عمدتاً توسط دوربین های دیجیتال و اسکنرها استفاده می شود. داده‌های EXIF شامل برچسب‌گذاری و اطلاعات فراداده در مورد فایل تصویر گرفته شده است. ابرداده ممکن است حاوی اطلاعاتی مانند ساخت دوربین، مدل، سرعت شاتر، تاریخ و زمان، دیافراگم، زمان نوردهی، وضوح X، وضوح Y باشد. و غیره.

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

کتابخانه دستکاری فراداده جاوا

API فراداده Java توسط GroupDocs

GroupDocs.Metadata for Java یک API Java مدیریت ابرداده آسان برای استفاده است. این قابلیت نه تنها استخراج ابرداده از تصاویری مانند JPG، PNG یا WebP را دارد، بلکه می‌تواند با گزینه‌های مختلف، متادیتا را از تصاویر و اسناد دیگر اضافه، ویرایش، به‌روزرسانی و حذف کند.

من از این API در این مقاله استفاده می‌کنم، بنابراین لطفاً با افزودن پیکربندی‌های زیر به pom.xml مطمئن شوید که دانلود یا آن را در برنامه‌های مبتنی بر Maven خود ادغام کنید.

مخزن و وابستگی

<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 را با استفاده از سازنده کلاس Metadata بارگیری کنید.
  • بسته ریشه آن را با فراخوانی روش 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 (Image File Directory) و GPS (Global Positioning System)، فقط باید روش‌های مربوطه بسته 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() دریافت کنید.
  • از روش های تنظیم کننده مانند؛
  • به طور مشابه، می توانید مقادیر Artist، Make، Model، Software، Image Width & Height، Date، Time و غیره را تنظیم کنید.

بسته 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 را از Images در Java حذف کنید

اگر می‌خواهید بسته EXIF را از هر فایلی حذف کنید، این کار بسیار ساده است، کافی است بسته EXIF آن را با فراخوانی setExifPackage(null) از بسته root روی 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 بیشتر ببینید

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

مقاله مرتبط