EXIF (Exchangeable Image File Format) เป็นมาตรฐานในการระบุรูปแบบภาพและเสียงที่กล้องดิจิทัลและสแกนเนอร์ใช้เป็นหลัก ข้อมูล EXIF รวมถึงข้อมูลแท็กและข้อมูลเมตาเกี่ยวกับไฟล์ภาพที่ถ่าย ข้อมูลเมตาอาจมีข้อมูล เช่น ยี่ห้อกล้อง รุ่น ความเร็วชัตเตอร์ วันที่และเวลา รูรับแสง เวลาเปิดรับแสง ความละเอียด X ความละเอียด Y เป็นต้น

หากคุณต้องการจัดการ แยก อัปเดต หรือลบข้อมูล EXIF ของรูปภาพของคุณโดยใช้โปรแกรม บทความนี้เหมาะสำหรับคุณ บทความนี้จะกล่าวถึงวิธีการจัดการกับข้อมูล EXIF ใน Java ต่อไปนี้:

ไลบรารีการจัดการข้อมูลเมตาของ Java

Metadata Java API โดย GroupDocs

GroupDocs.Metadata for Java เป็น Java API การจัดการข้อมูลเมตาที่ใช้งานง่าย มีความสามารถในการดึงข้อมูลเมตาจากรูปภาพเช่น JPG, PNG หรือ WebP เท่านั้น แต่ยังสามารถเพิ่ม แก้ไข อัปเดต และลบข้อมูลเมตาจากรูปภาพและเอกสารอื่นๆ ด้วยตัวเลือกต่างๆ

ฉันกำลังใช้ API นี้ในบทความนี้ ดังนั้นโปรดแน่ใจว่าได้ ดาวน์โหลด หรือรวมเข้ากับแอปพลิเคชันที่ใช้ 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 - Metadata Viewer

คุณสามารถอ่านคุณสมบัติของข้อมูล 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()
  • ใช้ setter วิธีการเช่น;
  • ในทำนองเดียวกัน คุณสามารถตั้งค่าสำหรับ 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 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

มาคุยกันเพิ่มเติม @ ฟอรัมสนับสนุนฟรี

บทความที่เกี่ยวข้อง