在android中图片选择可已使用如下办法打开相册:
val gallery = Intent(Intent.ACTION_PICK)
gallery.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*")
startActivityForResult(gallery, REQUEST_TAKE_PHOTOES)
在onActivityResult获取图片选择的列表
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (data != null) {
if (REQUEST_TAKE_PHOTOES == requestCode && resultCode === RESULT_OK && data.clipData != null) {
val imageNames: ClipData? = data.clipData
if (imageNames != null) {
for (i in 0 until imageNames.itemCount) {
val bitmap = MediaStore.Images.Media.getBitmap(
this.contentResolver,
imageNames.getItemAt(i).uri
)
val bitmapLogo = ImageUtil.drawTextToRightBottom(
this,
bitmap,
"示例文字${SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().time)}",
10,
Color.parseColor("#EF1200"),
10,
10
)
list.add(bitmapLogo)
uploadPhotoApapter.add(list)
uploadPhotoApapter.notifyItemChanged(cameraPhotoAdapter.itemCount)
}
}
} else {
data.data?.let {
val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, it)
//对图片添加水印 这里添加一张图片为示例:
val bitmapLogo = ImageUtil.drawTextToRightBottom(
this,
bitmap,
"示例文字${SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().time)}",
10,
Color.parseColor("#EF1200"),
10,
10
)
}
}
}
}
如果通过拍照获取图片则要使用如下方法打开拍照
Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
takePictureIntent.resolveActivity(packageManager)?.also {
val photoFile: File? = try {
createImageFile()
} catch (ex: java.io.IOException) {
Log.d("TAG", "IOException:${ex.message} ")
null
}
photoFile?.also {
val photoURI: Uri = FileProvider.getUriForFile(
this@ContentThreeClassActivity,
"${applicationID}.fileprovider",
it
)
takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
}
}
}
获取结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (REQUEST_TAKE_PHOTO == requestCode) {
if (currentPhotoPath.isNotBlank()) {
Log.d("TAG", "图片地址: $currentPhotoPath")
try {
val file = File(currentPhotoPath)
if (FileInputStream(file).channel.size() > 100) {
val uri = FileProvider.getUriForFile(
this,
"com.tan.android.fileprovider",
file
)
val bitmap = MediaStore.Images.Media.getBitmap(
this.contentResolver,
uri
)
val bitmapLogo = ImageUtil.drawTextToRightBottom(
this,
bitmap,
"示例文字${SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().time)}",
10,
Color.parseColor("#EF1200"),
10,
10
)
} else {
file.delete()
}
} catch (e: Exception) {
Log.d("TAG", "${e.message}")
}
}
}
}
其他工具方法:
//Bitmap对象保存为图片文件
private fun saveBitmapFile(bitmap: Bitmap): File {
val file = createImageFile()//将要保存图片的路径
try {
val bos = BufferedOutputStream(FileOutputStream(file))
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos)
bos.flush()
bos.close()
} catch (e: IOException) {
e.printStackTrace()
}
return file
}
//创建image图片
@Throws(java.io.IOException::class)
private fun createImageFile(): File {
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val storageDir: File? = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
return File.createTempFile(
"JPEG_${timeStamp}_", /* prefix */
".jpg", /* suffix */
storageDir /* directory */
).apply {
currentPhotoPath = absolutePath
}
}