JAVA如何修改图片exif的信息   读取本人已经解决了  就是不知道怎么修改  希望懂的大侠们指点一下

解决方案 »

  1.   

    如果我没有记错的话 Java有一个类用来专门操作文件的 
    还有一个类 专门用来操作目录 有了这两个类 应该就可以了 
    还有 楼主的结贴率貌似不是很高啊
      

  2.   

    网上搜到的
    需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0。这2个jar包比较好找,地址就不写了,搜索下就OK。需要注意的是,mediautil-1.0这个jar包你需要修改下。因为,项目需要休息GPS,其提供的例子后面还提供了个地址,里面有5个java文件,拿出来,在项目中建好。然后在jar包将里面5个同名的文件删除,就OK了。否则你的例子会报错,还有,项目的JDK必须是1.5,编译环境也必须是1.5哦。这2个jar包,前者只能读,不能写,后者呢可以读也可以写,但是使用没有前者方便,因此仍然保留。        下面就帖2段代码,只贴main方法了。        先是读取EXIF信息的。public static void main(String[] args) throws Exception { 
             File jpegFile = new File("D:\\nozip\\4.jpg"); 
             Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); 
             Directory exif = metadata.getDirectory(ExifDirectory.class);//这里要稍微注意下 
             Iterator tags = exif.getTagIterator(); 
             while (tags.hasNext()) { 
                 Tag tag = (Tag)tags.next(); 
                 System.out.println(tag); 
             } 
        } 上面写的稍微注意的地方是要注意ExifDirectory.class,因为ExifDirectory只是EXIF中大部分的参数,但是并不是所有的参数。比如要查看GPS的信息则需要GpsDirectory,而它和ExifDirectory都是继承自Directory。同样继承自Directory还有好几个,就看你需要的情况了。顺便贴下它的API。        再下面是写EXIF信息的。/** 
         * 将照片中的信息进行重写 
         * @param args 
         * @throws Exception 
         */ 
        public static void main(String[] args) throws Exception {         //原文件 
            InputStream fip = new BufferedInputStream(new FileInputStream("D:\\nozip\\2.jpg")); // No need to buffer 
            LLJTran llj = new LLJTran(fip); 
            try { 
                llj.read(LLJTran.READ_INFO, true); 
            } catch (LLJTranException e) { 
                e.printStackTrace(); 
            }         Exif exif = (Exif) llj.getImageInfo();       
             
            /* Set some values directly to gps IFD */ 
                     
            Entry e;         // Set Latitude 
            e = new Entry(Exif.ASCII);         
            e.setValue(0, 'N'); 
            exif.setTagValue(Exif.GPSLatitudeRef,-1, e, true);         //设置具体的精度 
             e = new Entry(Exif.RATIONAL); 
            e.setValue(0, new Rational(31, 1)); 
            e.setValue(1, new Rational(21, 1)); 
            e.setValue(2, new Rational(323, 1)); 
            exif.setTagValue(Exif.GPSLatitude,-1, e, true); 
             
            // Set Longitude 
            e = new Entry(Exif.ASCII); 
            e.setValue(0, 'E'); 
            exif.setTagValue(Exif.GPSLongitudeRef,-1, e, true); 
             
            //设置具体的纬度 
             e = new Entry(Exif.RATIONAL); 
            e.setValue(0, new Rational(120, 1)); 
            e.setValue(1, new Rational(58, 1)); 
            e.setValue(2, new Rational(531, 1)); 
            exif.setTagValue(Exif.GPSLongitude,-1, e, true); 
    文章出处:http://www.diybl.com/course/3_program/java/javaxl/2008829/138465.html
      

  3.   

    你们贴的这些代码我都看过  但是我不知道怎么样才能改图片的标题 作者之类的exif信息   希望知道的高手指点
      

  4.   

    直接copy的 都是一帮子贱人 能不能用就贴出来 
    我这个可以 时间 作者 相机都可以改 但是得在1.6的环境下 jar包我已经发布了 LLJTran llj = new LLJTran(new File("c:\\2.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();
      

  5.   


    这是jar包的例子
    readImage(llj, true, LLJTran.READ_INFO, 0, 0);
    这个方法没有贴出来啊!
    Important
    Please download Source Files Updated since 1.0 for fixes including an important fix to read large Exif headers properly. Compile these and prepend to your CLASSPATH for the fixes.
    (Source files last updated on May 13 2006) 
    注意文档这句话,我的jar包是在官网下的,没有修复,总报类型不匹配异常,更新一下就好了!
      

  6.   

     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");
    }