Compose IO

针对File Bitmap Uri String ByteArray 进行常用方法扩展

  • 创建缓存模板图片文件
  • 文件转Uri
  • Uri转Bitmap
  • Bitmap转File
  • Bitmap转ByteArray
  • Bitmap旋转角度
  • Bitmap ByteArray 旋转
  • ByteArray转Bitmap
  • 旋转图片
  • 图片文件纠正的角度
  • 图片文件压缩格式
  • Bitmap压缩为ByteArrayOutputStream
  • 压缩图片到多少kb
  • File转对应宽高的Bitmap
  • 图片File压缩到一定极限值
  • 文件后缀
  • File 获取 Bitmap options
  • ByteArray 获取 Bitmap options
  • InputStream 获取 Bitmap options
  • InputStream 转 Bitmap
  • 图片File缩略图
  • File是否是Bitmap
  • File是否可压缩图片
  • 多行Base64处理为单行
  • 文件转Base64字符串
  • Base64转File
  • Bitmap转Base64String
  • Base64转Bitmap
  • 创建媒体图片文件Uri
  • 创建媒体视频文件Uri
  • 创建媒体音频文件Uri
  • 通过后缀名称获取文件类型
  • 删除媒体文件
  • 级联删除文件夹
  • 级联清空文件夹
  • 计算文件或文件夹的总大小
  • InputStream转File
  • File转ByteArray
import android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.graphics.Bitmap
import android.graphics.Bitmap.CompressFormat
import android.graphics.BitmapFactory
import android.graphics.ImageDecoder
import android.graphics.Matrix
import android.graphics.Rect
import android.media.ExifInterface
import android.media.ThumbnailUtils
import android.net.Uri
import android.os.Build
import android.provider.MediaStore
import android.provider.OpenableColumns
import android.util.Base64
import androidx.core.content.FileProvider
import java.io.BufferedOutputStream
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.UnsupportedEncodingException
import java.net.URLDecoder
import java.net.URLEncoder
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import kotlin.math.min


/**
 * 创建缓存模板图片文件
 * @param context 上下文对象
 * @return IMG_XXX.png
 */
fun createExternalCacheImageFile(context: Context): File {
   
    return File.createTempFile("IMG_", ".jpg", context.externalCacheDir)
}

/**
 * 文件转Uri
 * @param context 上下文对象
 * @return Uri
 */
fun File.toUri(context: Context): Uri {
   
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   
        return FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", this)
    }
    return Uri.fromFile(this)
}

/**
 * Uri转File
 * @param context 上下文
 * @return file
 */
fun Uri.toFile(context: Context): File? {
   
    val contentResolver = context.contentResolver
    val cursor: Cursor? = contentResolver.query(this, null, null, null, null)
    return cursor?.use {
   
        if (it.moveToFirst()) {
   
            val columnIndex = it.getColumnIndex(OpenableColumns.DISPLAY_NAME)
            val displayName: String = it.getString(columnIndex)
            val file = File(context.externalCacheDir, displayName)
            val inputStream = contentResolver.openInputStream(this)
            val outputStream = FileOutputStream(file)
            inputStream?.use {
    input ->
                outputStream.use {
    output ->
                    input.copyTo(output)
                }
            }
            file
        } else {
   
            null
        }
    }
}
//***************************************[Bitmap]***************************************

/**
 * Uri转Bitmap
 * @param context 上下文对象
 * @return Bitmap
 */
@SuppressLint("NewApi")
fun Uri.toBitmap(context: Context): Bitmap {
   
    val source = ImageDecoder.createSource(context.contentResolver, this)
    return ImageDecoder.decodeBitmap(source)
}

/**
 * Bitmap转File
 */
fun Bitmap.toFile(context: Context): File {
   
    val file = File.createTempFile("IMG_", ".jpg", context.externalCacheDir)
    file.outputStream().use {
    stream ->
        compress(CompressFormat.PNG, 100, stream)
    }
    return file
}

/**
 * Bitmap转File
 * @param path 路径
 */
fun Bitmap.toFile(path: String): File {
   
    val file = File(path)
    file.outputStream().use {
    stream ->
        compress(CompressFormat.PNG, 100, stream)
    }
    return file
}

/**
 * Bitmap转File
 *
 * @param context 上下文
 * @param format  图片路径
 * @param quality 图片质量[1-100]
 * @return
 */
fun Bitmap.toFile(context: Context, format: CompressFormat, quality: Int): File {
   
    val file = File.createTempFile("IMG_", ".jpg", context.externalCacheDir)
    file.outputStream().use {
    stream ->
        compress(format, quality, stream)
    }
    return file
}


/**
 * Bitmap旋转角度
 * @param degrees 旋转角度
 * @return 操作后的Bitmap
 */
fun Bitmap.rotate(degrees: Float): Bitmap {
   
    val matrix = Matrix()
    matrix.postRotate(degrees)
    return Bitmap.createBitmap(this, 0, 0, width, height, matrix, true)
}

/**
 * Bitmap ByteArray 旋转
 * @param degrees 旋转角度
 */
fun ByteArray.rotate(degrees: Float): Bitmap {
   
    val bitmap = BitmapFactory.decodeByteArray(this, 0, size)
    val matrix = Matrix()
    matrix.postRotate(degrees)
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

/**
 * 旋转图片
 * @param degrees 旋转角度
 * @param width   目标宽度
 * @param height  目标高度
 * @return
 */
fun File.rotate(degrees: Float, width: Int, height: Int): Bitmap {
   
    val source = if (width > 0 && height > 0
内容概要:该论文深入研究了液压挖掘机动臂下降势能回收技术,旨在解决传统液压挖掘机能耗高的问题。提出了一种新型闭式回路势能回收系统,利用模糊PI自整定控制算法控制永磁无刷直流电动机,实现了变转速容积调速控制,消除了节流和溢流损失。通过建立数学模型和仿真模型,分析了不同负载下的系统性能,并开发了试验平台验证系统的高效性和节能效果。研究还涵盖了执行机构能量分布分析、系统元件参数匹配及电机控制性能优化,为液压挖掘机节能技术提供了理论和实践依据。此外,通过实验验证,该系统相比传统方案可降低28%的能耗,控制系统响应时间缩短40%,为工程机械的绿色化、智能化发展提供了关键技术支撑。 适合人群:从事工程机械设计、制造及维护的工程师和技术人员,以及对液压系统节能技术感兴趣的科研人员。 使用场景及目标:①理解液压挖掘机闭式回路动臂势能回收系统的原理和优势;②掌握模糊PI自整定控制算法的具体实现;③学习如何通过理论建模、仿真和实验验证来评估和优化液压系统的性能。 其他说明:此研究不仅提供了详细的理论分析和数学建模,还给出了具体的仿真代码和实验数据,便于读者在实际工作中进行参考和应用。研究结果表明,该系统不仅能显著提高能源利用效率,还能延长设备使用寿命,降低维护成本,具有重要的工程应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值