A Dart library providing the ability to load, save and manipulate images in a variety of different file formats.
The library is written entirely in Dart and has no reliance on dart:io
, so it can be used for both
server and web applications.
Because this library is written entirely in Dart and is a not native executed library, its performance will not be as fast as a native library.
Read/Write
- PNG / Animated APNG
- JPEG
- Targa
- GIF / Animated GIF
- PVR(PVRTC)
- ICO
- BMP
Read Only
- WebP / Animated WebP
- TIFF
- Photoshop PSD
- OpenEXR
Write Only
- CUR
Load an image asynchronously and resize it as a thumbnail.
import 'dart:io';
import 'dart:isolate';
import 'package:image/image.dart';
class DecodeParam {
final File file;
final SendPort sendPort;
DecodeParam(this.file, this.sendPort);
}
void decodeIsolate(DecodeParam param) {
// Read an image from file (webp in this case).
// decodeImage will identify the format of the image and use the appropriate
// decoder.
var image = decodeImage(param.file.readAsBytesSync())!;
// Resize the image to a 120x? thumbnail (maintaining the aspect ratio).
var thumbnail = copyResize(image, width: 120);
param.sendPort.send(thumbnail);
}
// Decode and process an image file in a separate thread (isolate) to avoid
// stalling the main UI thread.
void main() async {
var receivePort = ReceivePort();
await Isolate.spawn(
decodeIsolate, DecodeParam(File('test.webp'), receivePort.sendPort));
// Get the processed image from the isolate.
var image = await receivePort.first as Image;
await File('thumbnail.png').writeAsBytes(encodePng(image));
}