|
8 | 8 | */
|
9 | 9 | package com.github.nowelium.titanium.module.thumbnail;
|
10 | 10 |
|
| 11 | +import java.io.ByteArrayOutputStream; |
| 12 | + |
11 | 13 | import org.appcelerator.kroll.KrollDict;
|
12 | 14 | import org.appcelerator.kroll.KrollModule;
|
13 | 15 | import org.appcelerator.kroll.annotations.Kroll;
|
|
17 | 19 | import org.appcelerator.titanium.util.TiConfig;
|
18 | 20 |
|
19 | 21 | import android.graphics.Bitmap;
|
| 22 | +import android.graphics.Bitmap.CompressFormat; |
20 | 23 | import android.graphics.BitmapFactory;
|
21 | 24 | import android.graphics.Matrix;
|
| 25 | +import android.webkit.MimeTypeMap; |
22 | 26 |
|
23 | 27 | @Kroll.module(name="Thumbnail", id="com.github.nowelium.titanium.module.thumbnail")
|
24 | 28 | public class ThumbnailModule extends KrollModule
|
25 | 29 | {
|
26 |
| - |
| 30 | + |
27 | 31 | // Standard Debugging variables
|
28 | 32 | private static final String LCAT = "ThumbnailModule";
|
29 | 33 | private static final boolean DBG = TiConfig.LOGD;
|
30 | 34 |
|
31 | 35 | // You can define constants with @Kroll.constant, for example:
|
32 | 36 | // @Kroll.constant public static final String EXTERNAL_NAME = value;
|
33 | 37 |
|
| 38 | + @Kroll.constant |
| 39 | + public static final String MIME_JPEG = "image/jpeg"; |
| 40 | + |
| 41 | + @Kroll.constant |
| 42 | + public static final String MIME_PNG = "image/png"; |
| 43 | + |
34 | 44 | public ThumbnailModule(TiContext tiContext) {
|
35 | 45 | super(tiContext);
|
36 | 46 | }
|
37 | 47 |
|
38 | 48 | // Methods
|
39 | 49 | @Kroll.method
|
40 | 50 | public TiBlob resize(TiBlob blob){
|
41 |
| - return resizeFromBlob(blob, 320, 480, true); |
| 51 | + return resizeFromBlob(blob, 320, 480, true, MIME_JPEG); |
42 | 52 | }
|
43 | 53 |
|
44 | 54 | @Kroll.method
|
45 | 55 | public TiBlob resizeTo(TiBlob blob, KrollDict args){
|
46 | 56 | int width = args.optInt("width", 320).intValue();
|
47 | 57 | int height = args.optInt("height", 480).intValue();
|
48 | 58 | boolean keepAspect = args.optBoolean("keepAspect", true);
|
| 59 | + String mimeType = args.optString("mimeType", MIME_JPEG); |
49 | 60 |
|
50 |
| - return resizeFromBlob(blob, width, height, keepAspect); |
| 61 | + return resizeFromBlob(blob, width, height, keepAspect, mimeType); |
51 | 62 | }
|
52 |
| - |
53 |
| - private TiBlob resizeFromBlob(TiBlob blob, int width, int height, boolean keepAspect){ |
54 |
| - byte[] binary = blob.getBytes(); |
| 63 | + |
| 64 | + private TiBlob compress(Bitmap bitmap, CompressFormat format, String mimeType){ |
| 65 | + ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| 66 | + if(bitmap.compress(format, 80, out)){ |
| 67 | + return TiBlob.blobFromData(context, out.toByteArray(), mimeType); |
| 68 | + } |
| 69 | + // defaults: PNG(TiBlob.java:76<compress>) |
| 70 | + return TiBlob.blobFromImage(context, bitmap); |
| 71 | + } |
| 72 | + |
| 73 | + private TiBlob compress(Bitmap bitmap, String mimeType){ |
| 74 | + if(MIME_PNG.equals(mimeType)){ |
| 75 | + return compress(bitmap, CompressFormat.PNG, MIME_PNG); |
| 76 | + } |
| 77 | + return compress(bitmap, CompressFormat.JPEG, MIME_JPEG); |
| 78 | + } |
| 79 | + |
| 80 | + private TiBlob resizeFromBlob(TiBlob blob, int width, int height, boolean keepAspect, String mimeType){ |
| 81 | + final byte[] binary = blob.getBytes(); |
55 | 82 | final Bitmap target = BitmapFactory.decodeByteArray(binary, 0, binary.length);
|
56 | 83 | final Bitmap resized = resizeToSize(target, width, height, keepAspect);
|
57 | 84 | try {
|
58 |
| - return TiBlob.blobFromImage(context, resized); |
| 85 | + return compress(resized, mimeType); |
59 | 86 | } finally {
|
60 | 87 | target.recycle();
|
61 | 88 | resized.recycle();
|
|
0 commit comments