jpeg_encode
最小限のJPEGエンコーダー。
最小限のJPEGエンコーダー
以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。
Skia, the engine behind dart:ui has no support for JPEG, only PNG and raw RGBA. And the source
code comments make it clear that they don't intend to add any more formats, those should be left to
external packages.
While there are packages that offer full support for image manipulation, many a time we don't need that, just to be able to convert a file to JPG for use outside of our app, maybe to send it to the web. This package does that and nothing else. It's a minimalistic JPEG encoder that doesn't offer any extra functionality but to create the simplest JPEG file. Not necessarily the best or most compressed one, although it's fairly good, nonetheless.
The code is just a straight Dart port of an existing implementation of Jon Olick from https://www.jonolick.com/code.html.
Let's suppose you have a dart:ui Image from somewhere, maybe you converted from an incoming image:
import "dart:ui" as ui;
Uint8List bytes;
final codec = await ui.instantiateImageCodec(bytes);
final frame = await codec.getNextFrame();
final image = frame.image;
And you want to convert it to JPG (quality is between 0 and 100, as usual):
final data = await image.toByteData(format: skia.ImageByteFormat.rawRgba);
final jpg = JpegEncoder().compress(data!.buffer.asUint8List(), image.width, image.height, 90);
In other words, the pixel array is expected to be in row major format (all columns of first row,
then of the second row, etc), four bytes for each pixel: R, G, B and A. Alpha is ignored but the byte
is expected to be there. Consequently, the length of the array has to be width * height * 4.
Before you ask, saving in Flutter is as simple as:
File(path).writeAsBytesSync(jpg); // or
await File(path).writeAsBytes(jpg);
If you like this package, please consider supporting it.
依存関係一覧 3 件
{"sdk":"flutter"}{"sdk":"flutter"}^5.0.0用途で絞り込み、開発状況を比較し、採用前に元のリポジトリで要件を確認しましょう。
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗