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 } } }