|
@ -34,7 +34,6 @@ import com.ai.ipu.mobile.frame.plugin.Plugin;
|
34
|
34
|
import com.ai.ipu.mobile.ui.HintUtil;
|
35
|
35
|
import com.ai.ipu.mobile.ui.image.MobileGraphics;
|
36
|
36
|
import com.ai.ipu.mobile.util.DirectionUtil;
|
37
|
|
import com.ai.ipu.mobile.util.IpuMobileLog;
|
38
|
37
|
import com.ai.ipu.mobile.util.IpuMobileUtility;
|
39
|
38
|
import com.ailk.common.data.IData;
|
40
|
39
|
import com.ailk.common.data.impl.DataMap;
|
|
@ -46,6 +45,7 @@ import com.ailk.common.data.impl.DataMap;
|
46
|
45
|
*/
|
47
|
46
|
public class MobileCamera extends Plugin {
|
48
|
47
|
private static final int DEFAULT_COLOR = 0xffdcdcdc;
|
|
48
|
private static final int MAX_PIXELS = 1920 * 1080;
|
49
|
49
|
|
50
|
50
|
public enum TYPE {
|
51
|
51
|
BASE64_AND_PATH(2), //Base64编码和文件路径
|
|
@ -65,6 +65,8 @@ public class MobileCamera extends Plugin {
|
65
|
65
|
|
66
|
66
|
private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss");
|
67
|
67
|
private String photoFullPath;
|
|
68
|
private int minWidth;
|
|
69
|
private int minFileSize;
|
68
|
70
|
|
69
|
71
|
private Function func;
|
70
|
72
|
private enum Function {
|
|
@ -85,6 +87,8 @@ public class MobileCamera extends Plugin {
|
85
|
87
|
public void getPicture(JSONArray param) throws JSONException {
|
86
|
88
|
this.func = Function.getPicture;
|
87
|
89
|
int type = param.getInt(0);
|
|
90
|
minFileSize = param.optInt(1, 400 * 1024);
|
|
91
|
minWidth = param.optInt(2, 300);
|
88
|
92
|
/* 使用相册打开 */
|
89
|
93
|
Intent intent = new Intent(Intent.ACTION_PICK,
|
90
|
94
|
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
|
|
@ -100,6 +104,8 @@ public class MobileCamera extends Plugin {
|
100
|
104
|
public void getPhoto(JSONArray param) throws Exception {
|
101
|
105
|
this.func = Function.getPhoto;
|
102
|
106
|
int type = param.getInt(0);
|
|
107
|
minFileSize = param.optInt(1);
|
|
108
|
minWidth = param.optInt(2);
|
103
|
109
|
|
104
|
110
|
String appName = IpuAppInfo.getAppPath();
|
105
|
111
|
String photoName = appName + "-" + format.format(new Date()) + ".jpg";// 生成照片名称
|
|
@ -182,7 +188,7 @@ public class MobileCamera extends Plugin {
|
182
|
188
|
// }
|
183
|
189
|
// }
|
184
|
190
|
|
185
|
|
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
|
|
191
|
public void onActivityResult(final int requestCode, int resultCode, final Intent intent) {
|
186
|
192
|
// Activity.RESULT_CANCELED|Activity.RESULT_OK
|
187
|
193
|
if (func == Function.scanQrCode) {
|
188
|
194
|
if (resultCode == Activity.RESULT_OK) {
|
|
@ -193,77 +199,94 @@ public class MobileCamera extends Plugin {
|
193
|
199
|
} else if (func.equals(Function.getPhoto)) {
|
194
|
200
|
// 照相功能
|
195
|
201
|
if (resultCode == Activity.RESULT_OK) {
|
196
|
|
Bitmap bitmap = null;
|
197
|
|
try {
|
198
|
|
bitmap = getBitmapByImage(photoFullPath); //核实照片文件是否已经生成???????
|
199
|
|
} catch (Exception e) {
|
200
|
|
HintUtil.alert(context, e.getMessage());
|
201
|
|
return;
|
202
|
|
}
|
203
|
|
|
204
|
|
if (requestCode == TYPE.PATH.getType()) {
|
205
|
|
//MobileGraphics.savePicToLocal(bitmap, photoFullPath); //保存压缩文件
|
206
|
|
callback(photoFullPath);
|
207
|
|
}else if(requestCode == TYPE.BASE64.getType()){
|
208
|
|
bitmap = MobileGraphics.compressImage(bitmap, 50, quality); //压缩到50k
|
209
|
|
Bitmap base64Bitmap = MobileGraphics.compressImage(bitmap, 10, 30); //quality=30?
|
210
|
|
String out = MobileGraphics.bitmapToString(base64Bitmap); //base64缩略图
|
211
|
|
base64Bitmap.recycle();
|
212
|
|
callback(out);
|
213
|
|
}else{
|
214
|
|
//MobileGraphics.savePicToLocal(bitmap, photoFullPath); //保存压缩文件
|
215
|
|
bitmap = MobileGraphics.compressImage(bitmap, 50, quality); //压缩到50k
|
216
|
|
Bitmap base64Bitmap = MobileGraphics.compressImage(bitmap, 10, 30); //quality=30?
|
217
|
|
String out = MobileGraphics.bitmapToString(base64Bitmap); //base64处理
|
218
|
|
base64Bitmap.recycle();
|
219
|
|
IData result = new DataMap();
|
220
|
|
result.put("thumbnail", out); //缩略图
|
221
|
|
result.put("path", photoFullPath); //路径
|
222
|
|
callback(result.toString());
|
223
|
|
}
|
224
|
|
bitmap.recycle();
|
225
|
|
photoFullPath = null;
|
|
202
|
new Thread(new Runnable() {
|
|
203
|
@Override
|
|
204
|
public void run() {
|
|
205
|
Bitmap bitmap = null;
|
|
206
|
try {
|
|
207
|
bitmap = getBitmapByImage(photoFullPath); //核实照片文件是否已经生成???????
|
|
208
|
} catch (Exception e) {
|
|
209
|
HintUtil.alert(context, e.getMessage());
|
|
210
|
return;
|
|
211
|
}
|
|
212
|
|
|
213
|
if (requestCode == TYPE.PATH.getType()) {
|
|
214
|
//MobileGraphics.savePicToLocal(bitmap, photoFullPath); //保存压缩文件
|
|
215
|
if (minFileSize > 0) {
|
|
216
|
photoFullPath = MobileGraphics.compressImgToLength(bitmap, minFileSize, minWidth, requestCode, photoFullPath);
|
|
217
|
}
|
|
218
|
callback(photoFullPath);
|
|
219
|
}else if(requestCode == TYPE.BASE64.getType()){
|
|
220
|
String out = MobileGraphics.compressImgToLength(bitmap, minFileSize, minWidth, requestCode, null);
|
|
221
|
callback(out);
|
|
222
|
}else{
|
|
223
|
//MobileGraphics.savePicToLocal(bitmap, photoFullPath); //保存压缩文件
|
|
224
|
bitmap = MobileGraphics.compressImage(bitmap, 50, quality); //压缩到50k
|
|
225
|
Bitmap base64Bitmap = MobileGraphics.compressImage(bitmap, 10, 30); //quality=30?
|
|
226
|
String out = MobileGraphics.bitmapToString(base64Bitmap); //base64处理
|
|
227
|
base64Bitmap.recycle();
|
|
228
|
IData result = new DataMap();
|
|
229
|
result.put("thumbnail", out); //缩略图
|
|
230
|
result.put("path", photoFullPath); //路径
|
|
231
|
callback(result.toString());
|
|
232
|
}
|
|
233
|
bitmap.recycle();
|
|
234
|
photoFullPath = null;
|
|
235
|
}
|
|
236
|
}).start();
|
226
|
237
|
}
|
227
|
238
|
} else if (func.equals(Function.getPicture)) {// 从媒体库中获取
|
228
|
239
|
if (resultCode == Activity.RESULT_OK) {
|
229
|
|
Uri uri = intent.getData();
|
230
|
|
String picturePath = null;
|
231
|
|
if (uri.toString().startsWith("file:")) {
|
232
|
|
picturePath = uri.getPath();
|
233
|
|
} else if (uri.toString().startsWith("content:")) {
|
234
|
|
picturePath = getPath(uri);
|
235
|
|
} else {
|
236
|
|
HintUtil.alert(context,"请选择相册或者文件浏览器");
|
237
|
|
return;
|
238
|
|
}
|
239
|
|
|
240
|
|
Bitmap bitmap = null;
|
241
|
|
try {
|
242
|
|
bitmap = getBitmapByImage(picturePath);
|
243
|
|
} catch (Exception e) {
|
244
|
|
HintUtil.alert(context, e.getMessage());
|
245
|
|
return;
|
246
|
|
}
|
247
|
|
|
248
|
|
if (requestCode == TYPE.PATH.getType()) {
|
249
|
|
callback(picturePath);
|
250
|
|
}else if(requestCode == TYPE.BASE64.getType()){
|
251
|
|
bitmap = MobileGraphics.compressImage(bitmap, 50, quality); //压缩到50k
|
252
|
|
Bitmap base64Bitmap = MobileGraphics.compressImage(bitmap, 10, 30);
|
253
|
|
String out = MobileGraphics.bitmapToString(base64Bitmap);//base64缩略图
|
254
|
|
base64Bitmap.recycle();
|
255
|
|
callback(out);
|
256
|
|
}else{
|
257
|
|
bitmap = MobileGraphics.compressImage(bitmap, 50, quality); //压缩到50k
|
258
|
|
Bitmap base64Bitmap = MobileGraphics.compressImage(bitmap, 10, 30); //quality=30?
|
259
|
|
String out = MobileGraphics.bitmapToString(base64Bitmap); //base64处理
|
260
|
|
base64Bitmap.recycle();
|
261
|
|
IData result = new DataMap();
|
262
|
|
result.put("thumbnail", out); //缩略图
|
263
|
|
result.put("path", picturePath); //路径
|
264
|
|
callback(result.toString());
|
265
|
|
}
|
266
|
|
bitmap.recycle();
|
|
240
|
new Thread(new Runnable() {
|
|
241
|
@Override
|
|
242
|
public void run() {
|
|
243
|
Uri uri = intent.getData();
|
|
244
|
String picturePath = null;
|
|
245
|
if (uri.toString().startsWith("file:")) {
|
|
246
|
picturePath = uri.getPath();
|
|
247
|
} else if (uri.toString().startsWith("content:")) {
|
|
248
|
picturePath = getPath(uri);
|
|
249
|
} else {
|
|
250
|
HintUtil.alert(context,"请选择相册或者文件浏览器");
|
|
251
|
return;
|
|
252
|
}
|
|
253
|
|
|
254
|
Bitmap bitmap = null;
|
|
255
|
try {
|
|
256
|
bitmap = getBitmapByImage(picturePath);
|
|
257
|
} catch (Exception e) {
|
|
258
|
HintUtil.alert(context, e.getMessage());
|
|
259
|
return;
|
|
260
|
}
|
|
261
|
|
|
262
|
if (requestCode == TYPE.PATH.getType()) {
|
|
263
|
String resultPath = picturePath;
|
|
264
|
if (minFileSize > 0) {
|
|
265
|
String fileName = format.format(new Date()) + ".jpg";
|
|
266
|
String dir = DirectionUtil.getInstance(context).getImageDirection(true);
|
|
267
|
File dirFile = new File(dir);
|
|
268
|
if (!dirFile.exists()) dirFile.mkdirs();
|
|
269
|
resultPath = FileUtil.connectFilePath(dir,
|
|
270
|
fileName);
|
|
271
|
resultPath = MobileGraphics.compressImgToLength(bitmap, minFileSize, minWidth, requestCode, resultPath);
|
|
272
|
}
|
|
273
|
callback(resultPath);
|
|
274
|
}else if(requestCode == TYPE.BASE64.getType()){
|
|
275
|
String out = MobileGraphics.compressImgToLength(bitmap, minFileSize, minWidth, requestCode, null);
|
|
276
|
callback(out);
|
|
277
|
}else{
|
|
278
|
bitmap = MobileGraphics.compressImage(bitmap, 50, quality); //压缩到50k
|
|
279
|
Bitmap base64Bitmap = MobileGraphics.compressImage(bitmap, 10, 30); //quality=30?
|
|
280
|
String out = MobileGraphics.bitmapToString(base64Bitmap); //base64处理
|
|
281
|
base64Bitmap.recycle();
|
|
282
|
IData result = new DataMap();
|
|
283
|
result.put("thumbnail", out); //缩略图
|
|
284
|
result.put("path", picturePath); //路径
|
|
285
|
callback(result.toString());
|
|
286
|
}
|
|
287
|
bitmap.recycle();
|
|
288
|
}
|
|
289
|
}).start();
|
267
|
290
|
}
|
268
|
291
|
}
|
269
|
292
|
}
|
|
@ -278,7 +301,7 @@ public class MobileCamera extends Plugin {
|
278
|
301
|
public Bitmap getBitmapByImage(String imagePath){
|
279
|
302
|
BitmapFactory.Options opts = getBitmapOptions();
|
280
|
303
|
BitmapFactory.decodeFile(imagePath, opts);
|
281
|
|
opts.inSampleSize = MobileGraphics.computeSampleSize(opts, -1, 800 * 480);
|
|
304
|
opts.inSampleSize = MobileGraphics.computeSampleSize(opts, -1, MAX_PIXELS);
|
282
|
305
|
opts.inJustDecodeBounds = false;// 还原
|
283
|
306
|
Bitmap bitmap = null;
|
284
|
307
|
try {
|