JpegKit bridges the libjpeg-turbo C++ library into android and wraps it with an easy to use class. You can currently:
- Retrieve metadata such as width and height
- Rotate the JPEG 90, 180, or 270 degrees
- Flip the JPEG horizontally
- Flip the JPEG vertically
- Crop the JPEG to any Rect
This is all done without decoding the JPEG to RGB. All operations on the JPEG are done in C++ space and does not touch the Java memory, allowing you to work with extremely large JPEGs without the risk of an OutOfMemoryException.
Add JpegKit to the dependencies block in your
JpegKit currently expects a JPEG parameter in the form of a
byte. In the future you'll be able to just pass a file.
First, create a
byte jpeg = ...; JpegTransformer jpegTransformer = new JpegTransformer(jpeg);
After you perform your transformations, you can get a new JPEG
byte newJpeg = jpegTransformer.getJpeg();
getJpeg() call can only be used once. At this point our C++ libjpeg-turbo wrapper encodes the new JPEG and also disposes of the original and clears any other memory it used.
Transformations are performed in C++ right when you make the method call, as opposed to doing all after you finish with
getJpeg(). The transformations will be applied in the order you make the method calls.
You can currently retrieve a JPEGs width and height. This only decodes the JPEGs header information and is very fast.
int width = jpegTransformer.getWidth(); int height = jpegTransformer.getHeight();
Acceptable parameters are
Flip Horizontal or Vertical
Crop extends an
Rect cropRect = new Rect(left, top, right, bottom); jpegTransformer.crop(cropRect);