写真EXIF情報の読み取りと書き換えのJAVA実現


プロジェクトは写真のEXIF情報を処理する必要があるため、ネット上で検索した.ドラムが出てきたので、書いて、まとめます.
2つのjarパッケージ、metadata-extractor-2.3が必要です.1とmediautil-1.0です.この2つのjarパッケージは探しやすいので、住所は書かずに検索すればOKです.注意しなければならないのは、mediautil-1.0というjarパッケージを修正する必要があります.プロジェクトはGPSを修正する必要があるため、その提供例の後ろにアドレスが提供され、javaファイルが5つ入っていて、出して、プロジェクトの中で構築されています.そしてjarパッケージで同じ名前のファイルを5つ削除すればOKです.そうでなければ、あなたの例は間違っています.また、プロジェクトのJDKは1.5でなければなりません.コンパイル環境も1.5でなければなりません.この2つのjarパッケージは、前者は読むしかなく、書くことができず、後者は読むことも書くこともできますが、使うのは前者の便利さがないので、残っています.
次は2段のコードを貼って、mainの方法だけを貼ります.
まずEXIF情報を読み出します.
<span style="font-size:14px;">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);
         }
    }

</span>

ちょっと注意してと書いてあるのはExifDirectoryに注意することです.Classは、ExifDirectoryはEXIFのほとんどのパラメータにすぎないため、すべてのパラメータではありません.例えばGPSの情報を表示するにはGpsDirectoryが必要であり、ExifDirectoryもDirectoryから継承されています.同じくDirectoryから継承されているのはいくつかありますが、必要な状況次第です.ついでにAPIを貼ります.
次はEXIF情報を書きます.
<span style="font-size:14px;">       /**
         *            
         * @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);
            
            llj.refreshAppx(); // Recreate Marker Data for changes done

            //      ,      
             OutputStream out = new BufferedOutputStream(new FileOutputStream("D://nozip//1.jpg"));

            // Transfer remaining of image to output with new header.
            llj.xferInfo(null, out, LLJTran.REPLACE, LLJTran.REPLACE);

            fip.close();
            out.close();

            llj.freeMemory();
        }

</span>

画像中のGPS情報を書き換えた後、上でGPSを読むと何も読み取れず、ExifDirectoryでしか読み取れませんが、unkown tagばかりでおかしいです.しかし、機械などの設備では情報を読むことができます.
from: http://www.aiuxian.com/article/p-2976272.html