How to Resize Images Programmatically in Android? - GeeksforGeeks

17 Sep, 2021
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 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:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    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.Activityimport android.content.Intentimport android.graphics.Bitmapimport android.graphics.ImageDecoderimport android.net.Uriimport android.os.Buildimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.provider.MediaStoreimport android.widget.Buttonimport android.widget.ImageViewimport android.widget.Toastimport androidx.annotation.RequiresApiimport 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.
 
 
simmytarika5
Android
Kotlin
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Resource Raw Folder in Android Studio
Flutter - Custom Bottom Navigation Bar
How to Read Data from SQLite Database in Android?
How to Post Data to API using Retrofit in Android?
Retrofit with Kotlin Coroutine in Android
Android UI Layouts
Kotlin Array
Retrofit with Kotlin Coroutine in Android
How to Get Current Location in Android?
Kotlin Setters and Getters