Search packages, repositories and app categories

Package detailsv1.0.1

jpeg_encode

A minimalistic JPEG encoder.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
4.9K
Likes
19
Pub points
120

Install package

flutter pub add jpeg_encode

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A minimalistic JPEG encoder for Flutter that allows developers to compress and encode images into JPEG format across multiple platforms. Built with simplicity in mind, it provides a lightweight solution for converting image data to JPEG without requiring complex dependencies. Ideal for apps needing efficient image compression or saving images in a widely supported format. The package supports Android, iOS, Web, macOS, Windows, and Linux, ensuring broad compatibility. It is particularly useful in scenarios where file size reduction is critical.

Use cases

  • Image compression in mobile apps
  • Saving captured photos as JPEG
  • Reducing image file sizes for web uploads
  • Batch processing of image assets
  • Integrating JPEG encoding into cross-platform apps

Key features

  • Lightweight and minimal API
  • Cross-platform support
  • Simple encoding from image data
  • Efficient compression
  • No external native dependencies

Suitable for

  • Developers needing basic JPEG encoding
  • Apps focused on image optimization
  • Cross-platform multimedia applications
  • Projects requiring small footprint encoders

Considerations

  • Limited to JPEG format only
  • No advanced encoding options like quality tuning
  • Not suitable for complex image processing
  • Depends on underlying platform's image handling capabilities

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

JPEG encoder

pub package

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.

How to use

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);

Support

If you like this package, please consider supporting it.

Buy Me A Book

Categories

Source repository

Projects using this package

No data available yet.