馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
本帖最後由 iamjason008 於 2013-12-27 17:40 編輯
Library Source出處:https://code.google.com/p/sanselanandroid/
由於我包不出jar file,所以我在網路上找到別人包好的: http://mvnrepository.com/artifact/org.apache.sanselan/sanselan/0.97-incubator
由於我需要把一些資訊寫到圖片裡面,之後再從圖片裡面把這些資訊讀出來
原本是想要建一個資料庫存那些資訊,但由於檔案是曝露在太陽底下,user很容易操作這個目錄下的檔案
這樣會讓我的資料庫記錄跟目錄中的圖片產生不一致的狀況,之後還要去做同步的動作~~我覺得很麻煩!!
使用方法:
1.從出處取得jar file,放在你專案下libs目錄
2.呼叫的範例如下:
[寫到Mark note這個欄位下]
public void writeScanParameterToExif(String inputFilename, byte[] settings){
File originalFile = new File(inputFilename);
try {
JpegImageMetadata jpegMetadata = (JpegImageMetadata) Sanselan.getMetadata(originalFile);
TiffImageMetadata exif;
if (jpegMetadata != null) {
exif = jpegMetadata.getExif();
} else {
exif = null;
}
TiffOutputSet outputSet = null;
if (exif != null) {
outputSet = exif.getOutputSet();
}
if (outputSet == null) {
outputSet = new TiffOutputSet();
}
String commentString = new String(settings);//settings.toSting() not worked!!!!
byte[] bytesComment =
ExifTagConstants.EXIF_TAG_MAKER_NOTE.encodeValue(TiffFieldTypeConstants.FIELD_TYPE_ASCII,
commentString, outputSet.byteOrder);
TiffOutputField commentField = new
TiffOutputField(ExifTagConstants.EXIF_TAG_MAKER_NOTE,
ExifTagConstants.EXIF_TAG_MAKER_NOTE.dataTypes[0],
bytesComment.length, bytesComment);
outputSet.getOrCreateExifDirectory().add(commentField);
File tempFile = new File(Environment.getExternalStorageDirectory()+ "/tempImage.jpg");
OutputStream os = new FileOutputStream(tempFile);
os = new BufferedOutputStream(os);
try {
new ExifRewriter().updateExifMetadataLossless(originalFile, os, outputSet);//無法寫在同一個檔案上面!
} finally {
os.close();
//將暫存檔名Rename成原檔名!
tempFile.renameTo(originalFile);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void extractScanParameterFromExif(String imagePath) {
try {
IImageMetadata metadata = Sanselan.getMetadata(new File(imagePath));
if (metadata instanceof JpegImageMetadata) {
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (jpegMetadata != null) {
TiffField field = jpegMetadata.findEXIFValue(ExifTagConstants.EXIF_TAG_MAKER_NOTE);
String comment = null;
if (field != null)
comment = field.getValueDescription();
// Log.d(LOG_TAG, "@@@@comment=" + comment);
int [] settings = new int[5];
String [] splitStrings = comment.split(",");
for (int i= 0; i< 5;i++){
settings = Integer.valueOf(splitStrings.trim());
Log.d(LOG_TAG, "@@@@settings[" + i+ "]=" + settings);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
[寫到gps/artist/user comment]
public void testSanselanandroid(){
File originalFile = new File(ImageGridFragment.PICTURE_DIR + "yyyyyy.jpg");
try {
JpegImageMetadata jpegMetadata = (JpegImageMetadata) Sanselan.getMetadata(originalFile);
TiffImageMetadata exif;
if (jpegMetadata != null) {
exif = jpegMetadata.getExif();
} else {
exif = null;
}
TiffOutputSet outputSet = null;
if (exif != null) {
outputSet = exif.getOutputSet();
}
if (outputSet == null) {
outputSet = new TiffOutputSet();
}
outputSet.setGPSInDegrees(123.456f, 99.34f);
byte[] bytesComment =
ExifTagConstants.EXIF_TAG_USER_COMMENT.encodeValue(TiffFieldTypeConstants.FIELD_TYPE_ASCII,
"KasperComment", outputSet.byteOrder);
byte[] bytesAuthor =
TiffTagConstants.TIFF_TAG_ARTIST.encodeValue(TiffFieldTypeConstants.FIELD_TYPE_ASCII,
"KasperAuthor", outputSet.byteOrder);
TiffOutputField commentField = new
TiffOutputField(ExifTagConstants.EXIF_TAG_USER_COMMENT,
ExifTagConstants.EXIF_TAG_USER_COMMENT.dataTypes[0],
bytesComment.length, bytesComment);
TiffOutputField authorField = new
TiffOutputField(TiffTagConstants.TIFF_TAG_ARTIST,
TiffTagConstants.TIFF_TAG_ARTIST.dataTypes[0], bytesAuthor.length,
bytesAuthor);
outputSet.getOrCreateExifDirectory().add(commentField);
outputSet.getOrCreateRootDirectory().add(authorField);
File newFile = new File(ImageGridFragment.PICTURE_DIR + "yyyyyytest.jpg");
OutputStream os = new FileOutputStream(newFile);
os = new BufferedOutputStream(os);
try {
new ExifRewriter().updateExifMetadataLossless(originalFile, os, outputSet);
} finally {
os.close();
extractExifLatLonSans(ImageGridFragment.PICTURE_DIR + "yyyyyytest.jpg");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void extractExifLatLonSans(String imagePath) {
try {
IImageMetadata metadata = Sanselan.getMetadata(new File(imagePath));
if (metadata instanceof JpegImageMetadata) {
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
TiffImageMetadata exifMetadata = jpegMetadata.getExif();
if (exifMetadata != null) {
TiffImageMetadata.GPSInfo gpsInfo = exifMetadata.getGPS();
if (gpsInfo != null) {
double latitude = gpsInfo.getLatitudeAsDegreesNorth();
double longitude = gpsInfo.getLongitudeAsDegreesEast();
Log.d(LOG_TAG, "@@@@latitude=" + latitude + ",longitude=" + longitude);
}
TiffField field = jpegMetadata.findEXIFValue(ExifTagConstants.EXIF_TAG_USER_COMMENT);
String comment = "";
if (field != null)
comment = ((String)field.getValue()).substring(0);
Log.d(LOG_TAG, "@@@@comment=" + comment);
field = jpegMetadata.findEXIFValue(TiffTagConstants.TIFF_TAG_ARTIST);
String artist = "";
if (field != null)
artist = ((String)field.getValue()).substring(0);
Log.d(LOG_TAG, "@@@@artist=" + artist);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
[Source Code]
sanselanandroid-master.zip
(184.09 KB, 下載次數: 1)
|
評分
-
查看全部評分

|