56 lines
2.0 KiB
Kotlin
56 lines
2.0 KiB
Kotlin
package com.sw.dualscreen.utils
|
|
|
|
import android.content.Context
|
|
import android.graphics.Bitmap
|
|
import android.graphics.BitmapFactory
|
|
import android.net.Uri
|
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
|
import okhttp3.MultipartBody
|
|
import okhttp3.RequestBody
|
|
import java.io.File
|
|
import java.io.FileOutputStream
|
|
import java.io.InputStream
|
|
|
|
object ImageUtil {
|
|
|
|
fun uriToBitmap(context: Context, uri: Uri): Bitmap? {
|
|
return try {
|
|
val options = BitmapFactory.Options()
|
|
//options.inSampleSize = 2; // 这会将图片的尺寸缩小到原来的1/2
|
|
options.inJustDecodeBounds = false
|
|
// options.inPreferredConfig = Bitmap.Config.ARGB_8888
|
|
options.inPreferredConfig = Bitmap.Config.RGB_565
|
|
context.contentResolver.openInputStream(uri)?.use { stream ->
|
|
BitmapFactory.decodeStream(stream, null, options)
|
|
// BitmapFactory.decodeStream(stream)
|
|
}
|
|
context.contentResolver.openInputStream(uri)?.use { stream ->
|
|
BitmapFactory.decodeStream(stream)
|
|
}
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
null
|
|
}
|
|
}
|
|
|
|
fun uriToMultipart(context: Context, uri: Uri, partName: String): MultipartBody.Part? {
|
|
try {
|
|
val contentResolver = context.contentResolver
|
|
val inputStream: InputStream = contentResolver.openInputStream(uri) ?: return null
|
|
|
|
// 临时文件(避免直接访问SAF文件)
|
|
val tempFile = File.createTempFile("upload_", ".jpg", context.cacheDir)
|
|
|
|
val outputStream = FileOutputStream(tempFile)
|
|
inputStream.copyTo(outputStream)
|
|
inputStream.close()
|
|
outputStream.close()
|
|
|
|
val requestFile = RequestBody.create("image/*".toMediaTypeOrNull(), tempFile)
|
|
return MultipartBody.Part.createFormData(partName, tempFile.name, requestFile)
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
return null
|
|
}
|
|
}
|
|
} |