如何在 Java 中写入 EXIF 信息

1. 整体流程

首先,让我们来看一下整体的流程:

步骤 操作
1 读取图片文件
2 获取图片的 EXIF 信息
3 写入新的 EXIF 信息
4 保存图片文件

2. 具体步骤

步骤 1: 读取图片文件

// 读取图片文件
File file = new File("image.jpg");
BufferedImage image = ImageIO.read(file);

这段代码用于读取名为"image.jpg"的图片文件,并将其加载为 BufferedImage 对象。

步骤 2: 获取图片的 EXIF 信息

// 获取图片的 EXIF 信息
Metadata metadata = ImageMetadataReader.readMetadata(file);
ExifSubIFDDirectory directory = metadata.getFirstDirectoryOfType(ExifSubIFDDirectory.class);

上面的代码会利用第三方库 ImageMetadataReader 来获取图片的 EXIF 信息,然后从中获取 ExifSubIFDDirectory 对象。

步骤 3: 写入新的 EXIF 信息

// 写入新的 EXIF 信息
directory.setInt(ExifSubIFDDirectory.TAG_ORIENTATION, 1);

这段代码会将图片的旋转方向设置为正常,默认值为 1,具体数值可以根据需要进行修改。

步骤 4: 保存图片文件

// 保存图片文件
File output = new File("image_with_exif.jpg");
ImageIO.write(image, "jpg", output);

最后一步是将修改后的 BufferedImage 对象写回到新的图片文件中,即"image_with_exif.jpg"。

3. 整体代码示例

import org.apache.commons.imaging.ImageMetadataReader;
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
import org.apache.commons.imaging.formats.tiff.write.TiffOutputField;
import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ExifWriter {

    public static void main(String[] args) {
        File file = new File("image.jpg");

        try {
            // 读取图片文件
            BufferedImage image = ImageIO.read(file);

            // 获取图片的 EXIF 信息
            JpegImageMetadata metadata = (JpegImageMetadata) ImageMetadataReader.readMetadata(file);
            TiffImageMetadata exif = metadata.getExif();

            // 创建新的 EXIF 信息
            TiffOutputSet outputSet = exif.getOutputSet();
            outputSet.setGPSInDegrees(12.34, 56.78);
            outputSet.setGPSLatitudeRef("N");
            outputSet.setGPSLongitudeRef("W");

            // 保存图片文件
            File output = new File("image_with_exif.jpg");
            metadata.setExif(outputSet);

            ImageIO.write(image, "jpg", output);

            System.out.println("EXIF 信息写入成功!");
        } catch (ImageReadException | IOException e) {
            e.printStackTrace();
        }
    }
}

4. 总结

通过以上步骤,你可以成功地在 Java 中写入图片的 EXIF 信息。记得根据具体需求修改代码中的参数值,以便实现你想要的效果。希望这篇文章对你有所帮助!