Compressor

zetbaitsu更新放缓

Android 图片压缩库,用 Kotlin 协程在后台把照片压到指定大小或分辨率,省内存也省流量。

An android image compression library.

v3.0.1发布于 2021-03-22 14:50 UTC7,230star +1 / 7 天962fork同步于 2026-11-10 05:32 UTC

怎么上手

README 里没有找到可直接复制的安装命令

README 里没有找到可直接复制的安装命令,请到 README 或官方文档查看安装方式。

硬件要求

README 没有说明硬件要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

这个项目的说明还在生成中,先参考下面「最近发版」和 README。

最近发版

3 个版本v3.0.1
  1. v3.0.1最新正式版2021-03-22 · 2021-03-22 14:50 UTC
  2. v2.1.12021-03-22 · 2021-03-22 14:49 UTC
    查看更新说明
  3. v3.0.0v3.002020-01-26 · 2020-01-26 02:35 UTC
    查看更新说明
    • Kotlin Coroutines Based
    • Composable constraint

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Compressor

    Android Arsenal Build Status codecov

    Gradle

    dependencies {
        implementation 'id.zelory:compressor:3.0.1'
    }
    

    Let's compress the image size!

    Compress Image File
    val compressedImageFile = Compressor.compress(context, actualImageFile)
    
    Compress Image File to specific destination
    val compressedImageFile = Compressor.compress(context, actualImageFile) {
        default()
        destination(myFile)
    }
    

    I want custom Compressor!

    Using default constraint and custom partial of it
    val compressedImageFile = Compressor.compress(context, actualImageFile) {
        default(width = 640, format = Bitmap.CompressFormat.WEBP)
    }
    
    Full custom constraint
    val compressedImageFile = Compressor.compress(context, actualImageFile) {
        resolution(1280, 720)
        quality(80)
        format(Bitmap.CompressFormat.WEBP)
        size(2_097_152) // 2 MB
    }
    
    Using your own custom constraint
    class MyLowerCaseNameConstraint: Constraint {
        override fun isSatisfied(imageFile: File): Boolean {
            return imageFile.name.all { it.isLowerCase() }
        }
    
        override fun satisfy(imageFile: File): File {
            val destination = File(imageFile.parent, imageFile.name.toLowerCase())
            imageFile.renameTo(destination)
            return destination
        }
    }
    
    val compressedImageFile = Compressor.compress(context, actualImageFile) {
        constraint(MyLowerCaseNameConstraint()) // your own constraint
        quality(80) // combine with compressor constraint
        format(Bitmap.CompressFormat.WEBP)
    }
    
    You can create your own extension too
    fun Compression.lowerCaseName() {
        constraint(MyLowerCaseNameConstraint())
    }
    
    val compressedImageFile = Compressor.compress(context, actualImageFile) {
        lowerCaseName() // your own extension
        quality(80) // combine with compressor constraint
        format(Bitmap.CompressFormat.WEBP)
    }
    

    Compressor now is using Kotlin coroutines!

    Calling Compressor should be done from coroutines scope
    // e.g calling from activity lifecycle scope
    lifecycleScope.launch {
        val compressedImageFile = Compressor.compress(context, actualImageFile)
    }
    
    // calling from global scope
    GlobalScope.launch {
        val compressedImageFile = Compressor.compress(context, actualImageFile)
    }
    
    Run Compressor in main thread
    val compressedImageFile = Compressor.compress(context, actualImageFile, Dispatchers.Main)
    

    Old version

    Please read this readme

    License

    Copyright (c) 2016 Zetra.
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
       http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.