zetbaitsu / Compressor

An android image compression library.
7.04k stars 961 forks source link

Image taken from front camera gets Rotated after compression #198

Open imdineshsingh opened 2 years ago

imdineshsingh commented 2 years ago

I am getting issue, when Image is taken from front camera it gets Rotated after compression,

TrainedPro commented 2 years ago

Hello! Sorry i don't use kotlin so this may be unhelpful but in Python, upon performing something similar, the photo had exif rotation data. You can either get rid of that rotation data or better yet, just utilize that date so your device actually knows what the "Right side up" is.

Here is the Python code after opening it with PIL: ImageOps.exif_transpose(img)

Hope this helps and there is a Kotlin equivalent

ricodidan commented 1 year ago

I am getting issue, when Image is taken from front camera it gets Rotated after compression,

You can add this code to your own class, call the function and save bitmap to file after get rotated image.

   private fun getRotateImage(photoPath: String?, bitmap: Bitmap): Bitmap? {
        val ei = ExifInterface(
            photoPath!!
        )
        val orientation = ei.getAttributeInt(
            ExifInterface.TAG_ORIENTATION,
            ExifInterface.ORIENTATION_UNDEFINED
        )
        val rotatedBitmap: Bitmap? = when (orientation) {
            ExifInterface.ORIENTATION_ROTATE_90 -> rotateImage(bitmap, 90f)
            ExifInterface.ORIENTATION_ROTATE_180 -> rotateImage(bitmap, 180f)
            ExifInterface.ORIENTATION_ROTATE_270 -> rotateImage(bitmap, 270f)
            ExifInterface.ORIENTATION_NORMAL -> bitmap
            else -> bitmap
        }
        return rotatedBitmap
    }

    private fun rotateImage(source: Bitmap, angle: Float): Bitmap? {
        val matrix = Matrix()
        matrix.postRotate(angle)
        return Bitmap.createBitmap(
            source, 0, 0, source.width, source.height,
            matrix, true
        )
    }

    val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri)
    val rotatedImage = CheckRotatedImage.getRotateImage(filePathReal, bitmap)`