如何在 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 信息。记得根据具体需求修改代码中的参数值,以便实现你想要的效果。希望这篇文章对你有所帮助!