废话不多说,上代码
package cn.com.system.util;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import mediautil.gen.Rational;
import mediautil.image.jpeg.Entry;
import mediautil.image.jpeg.Exif;
import mediautil.image.jpeg.IFD;
import mediautil.image.jpeg.LLJTran;
import javax.swing.*;
import java.awt.*;
import java.awt.font.TextAttribute;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class PhotoUtil {
public static void addGPSExif(String path, String target, String GPS,String address) throws Exception {
JSONObject json = JSON.parseObject(GPS);
json.put("address",address);
createMark(path,path,json,Color.yellow, 0.75F,"宋体",30);
InputStream fip = new FileInputStream(path);
LLJTran llj = new LLJTran(fip);
llj.read(LLJTran.READ_INFO, true);
//这里是重点,网上很多人出现 mediautil.image.jpeg.JPEG cannot be cast to mediautil.image.jpeg.Exif 这个错误,原因是这张图片没有Exif头,需要给他初始化一个
if (!(llj.getImageInfo() instanceof Exif)) {
llj.addAppx(LLJTran.dummyExifHeader, 0,
LLJTran.dummyExifHeader.length, true);
}
Exif exif = (Exif) llj.getImageInfo();
//获取基础标签
IFD mainIfd = exif.getIFDs()[0];
//设置相机制造商
Entry e = new Entry(Exif.ASCII);
e.setValue(0, "leica");
mainIfd.addEntry(Exif.MAKE, e);
//设置相机型号
e = new Entry(Exif.ASCII);
e.setValue(0, "leica");
mainIfd.addEntry(Exif.MODEL, e);
//设置描述
e = new Entry(Exif.ASCII);
e.setValue(0, "xxx");
mainIfd.addEntry(Exif.IMAGEDESCRIPTION, e);
//版权
e = new Entry(Exif.ASCII);
e.setValue(0, "xxx");
mainIfd.addEntry(Exif.COPYRIGHT, e);
//获取私有标签
IFD exifOffSetId = mainIfd.getIFD(Exif.EXIFOFFSET);
if (exifOffSetId == null) {
exifOffSetId = new