simple_native_image_compress

Creator: coderz1093

Last updated:

0 purchases

simple_native_image_compress Image
simple_native_image_compress Images

Languages

Categories

Add to Cart

Description:

simple native image compress

simple_native_image_compress #
A simple native image compression library for Flutter written in rust using flutter_rust_bridge, image, cargokit and kamadak-exif
Why? #

For some reason, image compression in Dart is slow. Even with isolate.
There is no native libraries that supports WINDOWS & LINUX when it comes to image compression.

What does it do? #

If path for an image file is given, it will resize and return Jpeg/WebP image as Uint8List.

What it does not do #

Web Support with WASM. Since I use Angular for Web not Flutter

Prerequisite #

Rust
Android NDK for Android

Setup #

Follow the instructions here and install Rust
If installed already

rustup update
copied to clipboard
Android

Install rust tools for Android

cargo install cargo-ndk
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android
copied to clipboard

Since simple_native_image_compress requires Android NDK, install Android NDK via Android Studio and add ndkVersion in android/app/build.gradle.

android {
// by default the project uses NDK version from flutter plugin.
ndkVersion flutter.ndkVersion
copied to clipboard
Apple

Install rust tools for Apple

cargo install cargo-xcode
cargo install cargo-lipo
copied to clipboard

If you are targeting iOS

rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
copied to clipboard
Supported Output Formats #

Jpeg
WebP

Sampling Filter Types #

5 types of sampling filters are available and can be selected

Nearest, // Nearest Neighbor
Triangle, // Linear Filter (DEFAULT)
CatmullRom, // Cubic Filter
Gaussian, // Gaussian Filter
Lanczos3, // Lanczos with window 3


you can read more about sampling filters here image crate doc

Example #

Initialize Simple Native Image Compress in main function

Future<void> main() async {
await NativeImageCompress.init();
runApp(const MaterialApp(home: MyApp()));
}
copied to clipboard

After initialization call static methods from ImageCompress class

"contain" will make the image fit into the given max width/height.
try{
final bytes = await ImageCompress.contain(
filePath: yourFilePath,
compressFormat: CompressFormat.Jpeg,
quality: 90,
maxWidth: 512,
maxHeight: 512,
samplingFilter: FilterType.Lanczos3
);
} catch (e) {
print(e);
}
copied to clipboard
"fitWidth" will make the image fit into the given max width.
try{
final bytes = await ImageCompress.fitWidth(
filePath: yourFilePath,
compressFormat: CompressFormat.WebP,
maxWidth: 512,
samplingFilter: FilterType.Lanczos3
);
} catch (e) {
print(e);
}
copied to clipboard
"fitHeight" will make the image fit into the given max height.
try{
final bytes = await ImageCompress.fitHeight(
filePath: yourFilePath,
compressFormat: CompressFormat.WebP,
maxHeight: 512,
samplingFilter: FilterType.Lanczos3
);
} catch (e) {
print(e);
}
copied to clipboard
Default values #

Default value for width and/or height is 1024 px
Default value for Jpeg quality is 80 (For webP Quality does nothing)
Default value for samplingFilter is FilterType.Triangle

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.