写真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情報を読み出します.
ちょっと注意してと書いてあるのはExifDirectoryに注意することです.Classは、ExifDirectoryはEXIFのほとんどのパラメータにすぎないため、すべてのパラメータではありません.例えばGPSの情報を表示するにはGpsDirectoryが必要であり、ExifDirectoryもDirectoryから継承されています.同じくDirectoryから継承されているのはいくつかありますが、必要な状況次第です.ついでにAPIを貼ります.
次はEXIF情報を書きます.
画像中のGPS情報を書き換えた後、上でGPSを読むと何も読み取れず、ExifDirectoryでしか読み取れませんが、unkown tagばかりでおかしいです.しかし、機械などの設備では情報を読むことができます.
from: http://www.aiuxian.com/article/p-2976272.html
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