浏览代码

修改getPhoto和getPicture插件压缩方法

zhanglong7 5 年之前
父节点
当前提交
e1ac44ff5a
共有 1 个文件被更改,包括 94 次插入71 次删除
  1. 94 71
      ipu-plugin-basic/src/main/java/com/ai/ipu/mobile/plugin/MobileCamera.java

+ 94 - 71
ipu-plugin-basic/src/main/java/com/ai/ipu/mobile/plugin/MobileCamera.java

@ -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 {