exif 修改出错

baidu_34405762 2016-08-04 05:16:49
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import mediautil.gen.Rational;
import mediautil.image.jpeg.Entry;
import mediautil.image.jpeg.Exif;
import mediautil.image.jpeg.LLJTran;
import mediautil.image.jpeg.LLJTranException;


public class exifTestwrit {
/**
* 将照片中的信息进行重写
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
LLJTran llj = new LLJTran(new File("E:\\dd.jpg"));
readImage(llj, true, LLJTran.READ_INFO, 0, 0);
// llj.closeInternalInputStream();
String newTime = "";
Exif exif = (Exif) llj.getImageInfo();

Entry entry = exif.getTagValue(Exif.DATETIME, true);
if(entry != null)
entry.setValue(0, "1998:08:18 11:15:00");
entry = exif.getTagValue(Exif.DATETIMEORIGINAL, true);
if(entry != null)
entry.setValue(0, "1998:08:18 11:15:00");
entry = exif.getTagValue(Exif.DATETIMEDIGITIZED, true);
if(entry != null)
entry.setValue(0, "1998:08:18 11:15:00");
entry = exif.getTagValue(Exif.ORIENTATION, true);
System.out.println("Orient Entry = " + entry);
if(entry != null)
entry.setValue(0, new Integer(6));

llj.refreshAppx();

// FileInputStream fip = new FileInputStream("Img_1217.jpg");
FileOutputStream nhOp = new FileOutputStream("c:\\new_2.jpg");
llj.xferInfo(null, nhOp, LLJTran.REPLACE, LLJTran.REPLACE);
// fip.close();
nhOp.close();
}
public static void readImage(LLJTran llj, boolean keep_appxs, int stage1, int stage2, int stage3)throws LLJTranException
{
if(stage1 != 0)
llj.read(stage1, keep_appxs);
if(stage2 != 0)
llj.read(stage2, keep_appxs);
if(stage3 != 0)
llj.read(stage3, keep_appxs);
System.out.println("Successfully Read Image");
}
}

错误为
Exception in thread "main" java.lang.ClassCastException: mediautil.image.jpeg.JPEG cannot be cast to mediautil.image.jpeg.Exif
at exifTestwrit.main(exifTestwrit.java:27)
但是去查了api
getImageInfo的方法说明是这样的

public AbstractImageInfo getImageInfo()

Returns an instance of the Image Header Info. The Class of the Object returned is a specific implementation of AbstractImageInfo like Exif. If there is no specific Image Header Information like Exif an instance of JPEG containing basic Image Info is returned.

Returns:
Image Header Information

然后看了exif 的继承关系确实是
java.lang.Object
extended by mediautil.gen.BasicIo
extended by mediautil.image.jpeg.BasicJpegIo
extended by mediautil.image.jpeg.AbstractImageInfo<LLJTran>
extended by mediautil.image.jpeg.Exif
不明白为什么会报错
...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kinsland 2017-10-25
  • 打赏
  • 举报
回复
引用 2 楼 qq_17277089 的回复:
jdk5试试
表示一开始就用了jdk1.5了,也是会报这样的错误。 Exception in thread "main" java.lang.ClassCastException: mediautil.image.jpeg.JPEG at demo.ModifyExif.main(ModifyExif.java:34) 34行的代码是: Exif exif = (Exif) llj.getImageInfo(); 导入的包是: import mediautil.image.jpeg.Exif; import mediautil.image.jpeg.LLJTran; llj是: InputStream fip = new BufferedInputStream(new FileInputStream("C://Users//admin//Desktop//a.jpg")); // No need to buffer LLJTran llj = new LLJTran(fip);
qq_17277089 2016-08-08
  • 打赏
  • 举报
回复
jdk5试试
baidu_34405762 2016-08-08
  • 打赏
  • 举报
回复
发现官网有补丁包- -。但是替换class后还是没用

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧