simple_native_image_compress

Creator: coderz1093

Last updated:

0 purchases

TODO
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:

Customer Reviews

There are no reviews.