元数据添加到Android中创建的位图(Add Metadata to created bitmap

2019-10-20 03:59发布

我使用的是相机的意图拍照的话,我认为图像转换为ByteArray,并最终在本地保存在我的数据库。 用相机拍摄的原始图像拥有所有喜欢GPS纬度和经度等。但是,我从图像创建位图不包括任何元数据的元数据。 我怎样才能原来metedata添加到我的形象吗?

这里是我的代码在相机意图返回:

picUri = data.getData()    
Bitmap yourSelectedImage62 = null;
                String imagebytes2 ;
                try
                {
                    yourSelectedImage62 = MediaStore.Images.Media.getBitmap(this.getContentResolver(), picUri);
                    yourSelectedImage62 = Bitmap.createScaledBitmap(yourSelectedImage62, large_width, large_height, true);
                } catch (FileNotFoundException ex)
                {
                    Logger.getLogger(Screen_View_Submission.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Screen_New_Submission.class.getName()).log(Level.SEVERE, null, ex);
                }

                ByteArrayOutputStream bao62 = new ByteArrayOutputStream();
                yourSelectedImage62.compress(Bitmap.CompressFormat.JPEG, 75, bao62);
                byte[] ba62 = bao62.toByteArray();
                imagebytes2 = Base64.encodeToString(ba62,Base64.DEFAULT);
                yourSelectedImage62.recycle();

Answer 1:

元数据是不是位图的属性。 它被存储为JPEG文件的Exinf。 使用ExifInterface在这里更新元数据是设置GPS cordinates为例

exif = new ExifInterface(imageFile.getAbsolutePath());
        int num1Lat = (int) Math.floor(latitude);
        int num2Lat = (int) Math.floor((latitude - num1Lat) * 60);
        double num3Lat = (latitude - ((double) num1Lat + ((double) num2Lat / 60))) * 3600000;

        int num1Lon = (int) Math.floor(longitude);
        int num2Lon = (int) Math.floor((longitude - num1Lon) * 60);
        double num3Lon = (longitude - ((double) num1Lon + ((double) num2Lon / 60))) * 3600000;

        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, num1Lat + "/1," + num2Lat + "/1," + num3Lat + "/1000");
        exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, num1Lon + "/1," + num2Lon + "/1," + num3Lon + "/1000");

        if (latitude > 0) {
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "N");
        } else {
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "S");
        }

        if (longitude > 0) {
            exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "E");
        } else {
            exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "W");
        }
        exif.setAttribute(ExifInterface.TAG_MAKE, "FooBarr");
        exif.setAttribute(ExifInterface.TAG_MODEL, "KooKKoo");
        exif.setAttribute(ExifInterface.TAG_ORIENTATION,orientation+"");
        exif.saveAttributes();


文章来源: Add Metadata to created bitmap in Android