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 app
level build.gradle
:
compile 'com.camerakit:jpegkit:0.0.1'
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 JpegTransformer
:
byte[] jpeg = ...;
JpegTransformer jpegTransformer = new JpegTransformer(jpeg);
After you perform your transformations, you can get a new JPEG byte[]
back:
byte[] newJpeg = jpegTransformer.getJpeg();
The 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 90
, 180
, or 270
.
jpegTransformer.rotate(90);
Flip horizontal:
jpegTransformer.flipHorizontal();
Flip horizontal:
jpegTransformer.flipVertical();
Crop extends an android.graphics.Rect
.
Rect cropRect = new Rect(left, top, right, bottom);
jpegTransformer.crop(cropRect);
JpegKit is MIT License