简体   繁体   中英

Images selected with gallery are MUCH bigger then when taken with camera

in my app a user either picks an image from their image gallery or captures an image with their camera.

When you capture it is added to the gallery of the user.

I have found that the images, besides being the same image have massive changes in size.

Captured: 33kb

CODE:

    if (requestCode == TAKEIMAGE) {
        System.out.println("TAKE IMAGE");
        int photoLength = 0;
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        photoLength = GetBitmapLength(photo);

        SetSubmissionImage(photo, photoLength);
    }  

Taken from gallery: 1600kb

CODE:

    else if (requestCode == CHOOSEIMAGE) {
        System.out.println("CHOOSE IMAGE");

        Uri selectedImageUri = data.getData();
        selectedImagePath = getPath(selectedImageUri);
        try {
            FileInputStream fileis=new FileInputStream(selectedImagePath);
            BufferedInputStream bufferedstream=new BufferedInputStream(fileis);
            byte[] bMapArray= new byte[bufferedstream.available()];
            bufferedstream.read(bMapArray);

            int photoLength = 0;
            Bitmap photo = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);

            bMapArray = null;
            fileis.close();
            bufferedstream.close();



            //rotate to be portrait properly
            try {
                ExifInterface exif = new ExifInterface(selectedImagePath);
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
                Log.e("EXIF", "Exif: " + orientation);
                Matrix matrix = new Matrix();
                if (orientation == 6) {
                    matrix.postRotate(90);
                }
                else if (orientation == 3) {
                    matrix.postRotate(180);
                }
                else if (orientation == 8) {
                    matrix.postRotate(270);
                }
                photo = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); // rotating bitmap
            }
            catch (Exception e) {

            }

            //photo = GetCompressedBitmap(photo);
            photoLength = GetBitmapLength(photo);
            SetSubmissionImage(photo, photoLength);

        } 

Like other said in comments you need to start the camera activity with an intent that contains an uri where image will be saved:

// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

Then in your onActivityResult() method you can retrive the uri and load the image the from the URI in the intent.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM