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();
            })
        }
    相关文章
    |
    4天前
    |
    缓存 数据处理 Android开发
    Android经典实战之Kotlin常用的 Flow 操作符
    本文介绍 Kotlin 中 `Flow` 的多种实用操作符,包括转换、过滤、聚合等,通过简洁易懂的例子展示了每个操作符的功能,如 `map`、`filter` 和 `fold` 等,帮助开发者更好地理解和运用 `Flow` 来处理异步数据流。
    27 4
    |
    19天前
    |
    安全 Java Android开发
    探索安卓开发的未来:Kotlin语言的崛起与挑战
    在这篇文章中,我们将深入探讨Kotlin语言在安卓开发领域的应用及其对传统Java开发的颠覆性影响。通过分析Kotlin的特性、社区支持以及在实际项目中的应用案例,我们揭示了这一现代编程语言如何为开发者提供更简洁、更安全的编程体验,并讨论了它在面对性能优化和向后兼容性时所面临的挑战。文章旨在为读者呈现一个全面的视角,评估Kotlin作为未来安卓开发主流语言的可能性。
    44 1
    |
    9天前
    |
    缓存 API Android开发
    Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
    本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
    22 6
    |
    8天前
    |
    调度 Android开发 开发者
    【颠覆传统!】Kotlin协程魔法:解锁Android应用极速体验,带你领略多线程优化的无限魅力!
    【8月更文挑战第12天】多线程对现代Android应用至关重要,能显著提升性能与体验。本文探讨Kotlin中的高效多线程实践。首先,理解主线程(UI线程)的角色,避免阻塞它。Kotlin协程作为轻量级线程,简化异步编程。示例展示了如何使用`kotlinx.coroutines`库创建协程,执行后台任务而不影响UI。此外,通过协程与Retrofit结合,实现了网络数据的异步加载,并安全地更新UI。协程不仅提高代码可读性,还能确保程序高效运行,不阻塞主线程,是构建高性能Android应用的关键。
    27 4
    |
    8天前
    |
    Android开发 Kotlin
    The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.10 and higher
    The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.10 and higher
    22 3
    |
    17天前
    |
    XML 存储 Android开发
    Android实战经验之Kotlin中快速实现MVI架构
    本文介绍MVI(Model-View-Intent)架构模式,强调单向数据流与不可变状态管理,提升Android应用的可维护性和可测试性。MVI分为Model(存储数据)、View(展示UI)、Intent(用户动作)、State(UI状态)与ViewModel(处理逻辑)。通过Kotlin示例展示了MVI的实现过程,包括定义Model、State、Intent及创建ViewModel,并在View中观察状态更新UI。
    56 12
    |
    17天前
    |
    XML Android开发 数据格式
    Android实战经验之Kotlin中快速实现动态更改应用图标和名称
    本文介绍在Android中通过设置多个活动别名动态更改应用图标和名称的方法,涉及XML配置及Kotlin代码示例。
    57 10
    |
    28天前
    |
    安全 Android开发 Kotlin
    Android经典面试题之Kotlin中常见作用域函数
    **Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身
    26 8
    |
    3天前
    |
    编译器 Android开发 开发者
    Android经典实战之Kotlin 2.0 迁移指南:全方位优化与新特性解析
    本文首发于公众号“AntDream”。Kotlin 2.0 已经到来,带来了 K2 编译器、多平台项目支持、智能转换等重大改进。本文提供全面迁移指南,涵盖编译器升级、多平台配置、Jetpack Compose 整合、性能优化等多个方面,帮助开发者顺利过渡到 Kotlin 2.0,开启高效开发新时代。
    6 0
    |
    1月前
    |
    安全 Java Android开发
    探索Android应用开发中的Kotlin语言
    【7月更文挑战第19天】在移动应用开发的浩瀚宇宙中,Kotlin这颗新星以其简洁、安全与现代化的特性,正迅速在Android开发者之间获得青睐。从基本的语法结构到高级的编程技巧,本文将引导读者穿梭于Kotlin的世界,揭示其如何优化Android应用的开发流程并提升代码的可读性与维护性。我们将一起探究Kotlin的核心概念,包括它的数据类型、类和接口、可见性修饰符以及高阶函数等特性,并了解这些特性是如何在实际项目中得以应用的。无论你是刚入门的新手还是寻求进阶的开发者,这篇文章都将为你提供有价值的见解和实践指导。