网络上有许多应用程序可用于执行图像操作,例如裁剪、缩小图像文件大小或将图像调整为特定尺寸。大多数这些应用程序都是基于 API 的,其中图像被上传到匿名服务器,执行各种功能,然后显示为可供下载的结果。随着互联网的参与,这个过程变得复杂。但是,很少有应用程序可以在本地执行类似的操作。
通过本文,我们将向您展示如何在 Android 中以编程方式将图像调整为自定义尺寸。
分步实施
第 1 步:在 Android Studio 中创建一个新项目
要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。我们在 Kotlin 中演示了该应用程序,因此请确保在创建新项目时选择 Kotlin 作为主要语言。
步骤 2:使用 activity_main.xml 文件
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件中。下面是activity_main.xml文件的代码。添加两个用于上传和调整大小的按钮和一个 ImageView 以在布局中上传和调整大小时显示图像。
XML
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
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(R.id.upload_button)
val mResizeButton = findViewById(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()
}
}
}
}