|  
       
            
       
       
      
       
      
      
 
| 
本帖最後由 iamjason008 於 2013-12-27 17:40 編輯
x
馬上加入Android 台灣中文網,立即免費下載應用遊戲。您需要 登錄 才可以下載或查看,沒有帳號?註冊  
 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) | 
 評分
查看全部評分
  |