替换 GPS 标签值 [编辑 EXIF]
Replacing GPS Tag values [Editing EXIF]
我正在尝试删除标签以便能够使用更正后的值重新添加它。有问题的 exif 标签是:GPSImgDirection 但它似乎没有保存新值(我猜它不是 removing/finding 标签)
我到底做错了什么?我一直在尝试遵循 apache (WriteExifMetadataExample.java) 中的示例文件。
P.S。我在Rational值中设置了常量值来简化代码示例...
public static void setBearing(File f, Double bearing)
throws IOException, ImageReadException, ImageWriteException{
try (FileOutputStream fos = new FileOutputStream(f.getParent()+ File.separator+"SUPERTMPDUMP12324231.jpg",false);
OutputStream os = new BufferedOutputStream(fos);) {
TiffOutputSet outputSet = null;
final ImageMetadata metadata = Imaging.getMetadata(new File(f.getAbsolutePath()));
final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (null != jpegMetadata) {
final TiffImageMetadata exif = jpegMetadata.getExif();
if (null != exif) {
outputSet = exif.getOutputSet();
}
}
if (null == outputSet) {
outputSet = new TiffOutputSet();
}
Rational r = new Rational(bearing);
final TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
exifDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION );
exifDirectory.add(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION, new RationalNumber(454349, 10000));
new ExifRewriter().updateExifMetadataLossless(f, os,
outputSet);
//Replace file with new meta data
Files.move(Paths.get(f.getPath()+ File.separator+"SUPERTMPDUMP12324231.jpg"), Paths.get(f.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING);
}
}
找到问题,因为它在 "GPS" 目录中,我需要:
final TiffOutputDirectory exifDirectory = outputSet.getOrCreateGPSDirectory();
而不是
final TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
我正在尝试删除标签以便能够使用更正后的值重新添加它。有问题的 exif 标签是:GPSImgDirection 但它似乎没有保存新值(我猜它不是 removing/finding 标签)
我到底做错了什么?我一直在尝试遵循 apache (WriteExifMetadataExample.java) 中的示例文件。
P.S。我在Rational值中设置了常量值来简化代码示例...
public static void setBearing(File f, Double bearing)
throws IOException, ImageReadException, ImageWriteException{
try (FileOutputStream fos = new FileOutputStream(f.getParent()+ File.separator+"SUPERTMPDUMP12324231.jpg",false);
OutputStream os = new BufferedOutputStream(fos);) {
TiffOutputSet outputSet = null;
final ImageMetadata metadata = Imaging.getMetadata(new File(f.getAbsolutePath()));
final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (null != jpegMetadata) {
final TiffImageMetadata exif = jpegMetadata.getExif();
if (null != exif) {
outputSet = exif.getOutputSet();
}
}
if (null == outputSet) {
outputSet = new TiffOutputSet();
}
Rational r = new Rational(bearing);
final TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
exifDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION );
exifDirectory.add(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION, new RationalNumber(454349, 10000));
new ExifRewriter().updateExifMetadataLossless(f, os,
outputSet);
//Replace file with new meta data
Files.move(Paths.get(f.getPath()+ File.separator+"SUPERTMPDUMP12324231.jpg"), Paths.get(f.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING);
}
}
找到问题,因为它在 "GPS" 目录中,我需要:
final TiffOutputDirectory exifDirectory = outputSet.getOrCreateGPSDirectory();
而不是
final TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();