0 purchases
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
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.