simple_native_image_compress 1.1.1 simple_native_image_compress: ^1.1.1 copied to clipboard
A simple native image compression library for Flutter that supports Windows and Linux as well
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 notFlutter
Prerequisite #
- Rust
- Android NDK for Android
Setup #
- Follow the instructions here and install
Rust
- If installed already
rustup update
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
- Since
simple_native_image_compress
requires Android NDK, installAndroid NDK
viaAndroid Studio
and add ndkVersion inandroid/app/build.gradle
.
android {
// by default the project uses NDK version from flutter plugin.
ndkVersion flutter.ndkVersion
Apple
- Install rust tools for Apple
cargo install cargo-xcode
cargo install cargo-lipo
- If you are targeting iOS
rustup target add \
aarch64-apple-ios \
x86_64-apple-ios \
aarch64-apple-ios-sim
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 #
Call Library as a Singleton
final compress = SimpleNativeImageCompress();
"contain" will make the image fit into the given max width/height.
try{
final bytes = await compress.contain(
filePath: yourFilePath,
compressFormat: CompressFormat.Jpeg,
quality: 90,
maxWidth: 512,
maxHeight: 512,
samplingFilter: FilterType.Lanczos3
);
} catch (e) {
print(e);
}
"fitWidth" will make the image fit into the given max width.
try{
final bytes = await compress.fitWidth(
filePath: yourFilePath,
compressFormat: CompressFormat.WebP,
maxWidth: 512,
samplingFilter: FilterType.Lanczos3
);
} catch (e) {
print(e);
}
"fitHeight" will make the image fit into the given max height.
try{
final bytes = await compress.fitHeight(
filePath: yourFilePath,
compressFormat: CompressFormat.WebP,
maxHeight: 512,
samplingFilter: FilterType.Lanczos3
);
} catch (e) {
print(e);
}
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