Open In App

How to Resize Images Programmatically in Android?

Last Updated : 17 Sep, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

There are many applications available on the net for performing image operations such as cropping, reducing image file size, or resizing the images to particular dimensions. Most of these applications are API based where the image is uploaded to anonymous servers, various functions are performed and then displayed as a result available for download. The process becomes complex with the involvement of the internet. However, there are few applications that can locally perform similar operations.

Through this article, we will show you how you could resize an image to custom dimensions programmatically in Android.

Step by Step Implementation

Step 1: Create a New Project in Android Studio

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. We demonstrated the application in Kotlin, so make sure you select Kotlin as the primary language while creating a New Project.

Step 2: Working with the activity_main.xml file

Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file. Add two Buttons to upload and resize and an ImageView to display the image when uploaded and resized in the layout.

XML




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <!-- Button to upload Image from the device -->
    <Button
        android:id="@+id/upload_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Upload"/>
 
    <!-- Button to perform resize operation -->
    <Button
        android:id="@+id/resize_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Resize"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
 
    <!-- ImageView to display images after
          uploading and resizing -->
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>
 
</RelativeLayout>


 

 

Step 3: Working with the MainActivity.kt file

 

Go to the MainActivity.kt file and refer to the following code. Below is the code for the MainActivity.kt file. Comments are added inside the code to understand the code in more detail. Perform resizing operations in the main code.

 

Kotlin




import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.ImageDecoder
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import android.widget.ImageView
import android.widget.Toast
import androidx.annotation.RequiresApi
import java.io.IOException
 
class MainActivity : AppCompatActivity() {
 
    // Declaring ImageView, number of images to pick
    // from the device and a Bitmap to store the image
    private lateinit var mImageView: ImageView
    private val mPickImage = 1
    private lateinit var mYourBitmap: Bitmap
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        // Declaring and initializing the buttons
        val mUploadButton = findViewById<Button>(R.id.upload_button)
        val mResizeButton = findViewById<Button>(R.id.resize_button)
 
        // Initializing the image view
        mImageView = findViewById(R.id.imageView)
 
        // When upload button is clicked, the intent navigates
        // to the local content in the device,
        // where one can select the desired image
        mUploadButton.setOnClickListener {
            val intent = Intent(Intent.ACTION_GET_CONTENT)
            intent.type = "image/*"
            startActivityForResult(intent, mPickImage)
        }
 
        // When resize button is clicked
        mResizeButton.setOnClickListener {
            // Generate a new Bitmap of custom dimensions and set it in the image view
            val resized = Bitmap.createScaledBitmap(mYourBitmap, 300, 300, true)
            mImageView.setImageBitmap(resized)
        }
    }
 
    @RequiresApi(Build.VERSION_CODES.P)
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == mPickImage && resultCode == Activity.RESULT_OK) {
            // If the image file does not exist
            if (data == null) {
                Toast.makeText(applicationContext,"Error",Toast.LENGTH_SHORT).show()
                return
            }
 
            // Otherwise
            try {
                // Load the image address and set it in the image view
                val imageUri: Uri = data.data!!
                val source = ImageDecoder.createSource(this.contentResolver, imageUri)
                mYourBitmap = ImageDecoder.decodeBitmap(source)
                mImageView.setImageBitmap(mYourBitmap)
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
    }
}


 

 

Output:

 

You can see that the image size is reduced when resize button is clicked.

 

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads