Compressor

An android image compression library.
Alternatives To Compressor
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Squoosh19,580529 days ago12January 03, 2023201apache-2.0TypeScript
Make images smaller using best-in-class codecs, right in the browser.
Compressor6,557
a year ago4March 22, 2021125Kotlin
An android image compression library.
Crunch3,146
a year ago9otherPython
Insane(ly slow but wicked good) PNG image optimization
Tiny2,495
3 years ago57apache-2.0C
an image compression framework.(一个高保真、高压缩比的图片压缩框架)
Caesium Image Compressor1,850
4 days ago21gpl-3.0C++
Caesium is an image compression software that helps you store, send and share digital pictures, supporting JPG, PNG and WebP formats. You can quickly reduce the file size (and resolution, if you want) by preserving the overall quality of the image.
Image Actions1,324
a month ago25gpl-3.0TypeScript
A Github Action that automatically compresses JPEGs, PNGs and WebPs in Pull Requests.
Advancedluban1,249
4 years ago26apache-2.0Java
An Advanced Compress Image Library for Android / 高效、简洁的图片压缩工具库
Imgsquash949
3 years ago7mitJavaScript
Simple image compression full website code written in node, react and next.js framework. Easy to deploy as a microservice.
Browser Image Compression92223262 months ago21April 12, 202238mitJavaScript
Image compression in web browser
Srec918
2 years ago8mitPython
PyTorch Implementation of "Lossless Image Compression through Super-Resolution"
Alternatives To Compressor
Select To Compare


Alternative Project Comparisons
Readme

Compressor

Android Arsenal Build Status codecov

Compressor is a lightweight and powerful android image compression library. Compressor will allow you to compress large photos into smaller sized photos with very less or negligible loss in quality of the image.

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.
Popular Compression Projects
Popular Image Compression Projects
Popular Software Performance Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Kotlin
Compression
Coroutines
Kotlin Android
Compress
Compressor
Kotlin Library
Kotlin Coroutines
Image Compression