Android kotlin压缩图片列子

简介: Android kotlin压缩图片列子

很应用都有个人信息,个人信息就包含设置头像(很多自己的帅照或者PS之后的美女照就会网上放)如果Android本地图片保存较大,上传到服务器的时候比较耗时,一直加载中,最后有可能上传失败,让帅照上传不成功,导致心情不好,可能APP的评论就是差评,其实头像显示的不是很大,这时候为了性能及用户体验,Android你本地可以上传一张自己先压缩的图片,接下来看看在kotlin实现的图片压缩代码:

一实现图片压缩

    class MainActivity : AppCompatActivity() {
        private var path = Environment.getExternalStorageDirectory().absolutePath+"/gnw/wx.png"; //定义路径  var是变量
        private val pathYa = Environment.getExternalStorageDirectory().absolutePath+"/gnw/wx2.png" //也可以使用常量定义
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            img1.setImageResource(R.mipmap.wx)    //不需要使用注解方式直接可以findViewByID 及赋值 是不是很直接
            img2 .setImageResource(R.mipmap.wx)
            img1.setOnClickListener(View.OnClickListener {
                Toast.makeText(this,"监听imageview事件",Toast.LENGTH_LONG).show();
            })
            setListener(img1)
           // bitmapCom1();
            bitmapCom2();
        }
        /**
         * 压缩图片方法1
         */
        fun  bitmapCom1() {
            Toast.makeText(this,"压缩图片",Toast.LENGTH_LONG).show();
             var bitmap: Bitmap;
             bitmap = BitmapFactory.decodeFile(path)
             try {
                 var file = File(path)
                 var leangth = file.length()
                 var bl:Int = ((leangth/(1024*100)+1).toInt())
                 var quality = 100/bl
                 var  fileOutputStream = FileOutputStream(pathYa)
                 bitmap.compress(Bitmap.CompressFormat.PNG, quality, fileOutputStream)
             }catch (e:Exception){
                e.printStackTrace()
             }
        }
        /**
         * 压缩图片方法12
         */
        fun bitmapCom2(){
            var by = ByteArrayOutputStream() //流不关闭是直接追加
            var quality = 100;
            var bitmap: Bitmap;
            bitmap = BitmapFactory.decodeFile(path)
            while (true){
                by.reset()
                bitmap .compress(Bitmap.CompressFormat.PNG,quality,by)
                var size = by.size()
                if (size>100*1024){
                    quality -= 2
                }else{
                  break
                }
            }
            var  fileOutputStream = FileOutputStream(pathYa)
            bitmap.compress(Bitmap.CompressFormat.PNG, quality, fileOutputStream)
        }
        fun setListener(view:View){
            view.setOnClickListener(View.OnClickListener {
                Toast.makeText(this,"监听imageview事件",Toast.LENGTH_LONG).show();
            })
        }
    相关文章
    |
    3月前
    |
    设计模式 Android开发 Kotlin
    Android经典实战之Kotlin委托模式和by关键字
    本文介绍了Kotlin中`by`关键字在类及属性委托中的运用,通过实例展示了如何利用类委托简化接口实现,以及如何借助标准与自定义属性委托管理属性的读写操作。通过`by`关键字的支持,Kotlin使得委托模式的实现更为直观且高效。
    86 4
    |
    3月前
    |
    缓存 安全 Android开发
    Android经典实战之用Kotlin泛型实现键值对缓存
    本文介绍了Kotlin中泛型的基础知识与实际应用。泛型能提升代码的重用性、类型安全及可读性。文中详细解释了泛型的基本语法、泛型函数、泛型约束以及协变和逆变的概念,并通过一个数据缓存系统的实例展示了泛型的强大功能。
    41 2
    |
    2月前
    |
    Android开发 Kotlin
    Android经典面试题之Kotlin的==和===有什么区别?
    本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
    189 93
    |
    3月前
    |
    编译器 API Android开发
    Android经典实战之Kotlin Multiplatform 中,如何处理不同平台的 API 调用
    本文介绍Kotlin Multiplatform (KMP) 中使用 `expect` 和 `actual` 关键字处理多平台API调用的方法。通过共通代码集定义预期API,各平台提供具体实现,编译器确保正确匹配,支持依赖注入、枚举类处理等,实现跨平台代码重用与原生性能。附带示例展示如何定义跨平台函数与类。
    107 0
    |
    28天前
    |
    存储 前端开发 测试技术
    Android kotlin MVVM 架构简单示例入门
    Android kotlin MVVM 架构简单示例入门
    28 1
    |
    1月前
    |
    调度 Android开发 开发者
    构建高效Android应用:探究Kotlin多线程优化策略
    【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
    47 4
    |
    1月前
    |
    JSON 调度 数据库
    Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
    22 1
    |
    1月前
    |
    Android开发 Kotlin
    Android面试题之Kotlin中如何实现串行和并行任务?
    本文介绍了 Kotlin 中 `async` 和 `await` 在并发编程中的应用,包括并行与串行任务的处理方法。并通过示例代码展示了如何启动并收集异步任务的结果。
    25 0
    |
    1月前
    |
    Java 调度 Android开发
    Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
    本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
    25 0
    |
    2月前
    |
    安全 Android开发 开发者
    探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
    在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
    73 6
    下一篇
    无影云桌面