Browse Source

修改getPhoto和getPicture插件压缩方法

zhanglong7 5 years ago
parent
commit
e1ac44ff5a

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

34
import com.ai.ipu.mobile.ui.HintUtil;
34
import com.ai.ipu.mobile.ui.HintUtil;
35
import com.ai.ipu.mobile.ui.image.MobileGraphics;
35
import com.ai.ipu.mobile.ui.image.MobileGraphics;
36
import com.ai.ipu.mobile.util.DirectionUtil;
36
import com.ai.ipu.mobile.util.DirectionUtil;
37
import com.ai.ipu.mobile.util.IpuMobileLog;
38
import com.ai.ipu.mobile.util.IpuMobileUtility;
37
import com.ai.ipu.mobile.util.IpuMobileUtility;
39
import com.ailk.common.data.IData;
38
import com.ailk.common.data.IData;
40
import com.ailk.common.data.impl.DataMap;
39
import com.ailk.common.data.impl.DataMap;
46
 */
45
 */
47
public class MobileCamera extends Plugin {
46
public class MobileCamera extends Plugin {
48
	private static final int DEFAULT_COLOR = 0xffdcdcdc;
47
	private static final int DEFAULT_COLOR = 0xffdcdcdc;
48
	private static final int MAX_PIXELS = 1920 * 1080;
49
49
50
	public enum TYPE {
50
	public enum TYPE {
51
		BASE64_AND_PATH(2), //Base64编码和文件路径
51
		BASE64_AND_PATH(2), //Base64编码和文件路径
65
65
66
	private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss");
66
	private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss");
67
	private String photoFullPath;
67
	private String photoFullPath;
68
	private int minWidth;
69
	private int minFileSize;
68
70
69
	private Function func;
71
	private Function func;
70
	private enum Function {
72
	private enum Function {
85
	public void getPicture(JSONArray param) throws JSONException {
87
	public void getPicture(JSONArray param) throws JSONException {
86
		this.func = Function.getPicture;
88
		this.func = Function.getPicture;
87
		int type = param.getInt(0);
89
		int type = param.getInt(0);
90
		minFileSize = param.optInt(1, 400 * 1024);
91
		minWidth = param.optInt(2, 300);
88
		/* 使用相册打开 */
92
		/* 使用相册打开 */
89
		Intent intent = new Intent(Intent.ACTION_PICK,
93
		Intent intent = new Intent(Intent.ACTION_PICK,
90
				android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
94
				android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
100
	public void getPhoto(JSONArray param) throws Exception {
104
	public void getPhoto(JSONArray param) throws Exception {
101
		this.func = Function.getPhoto;
105
		this.func = Function.getPhoto;
102
		int type = param.getInt(0);
106
		int type = param.getInt(0);
107
		minFileSize = param.optInt(1);
108
        minWidth = param.optInt(2);
103
109
104
		String appName = IpuAppInfo.getAppPath();
110
		String appName = IpuAppInfo.getAppPath();
105
		String photoName = appName + "-" + format.format(new Date()) + ".jpg";// 生成照片名称
111
		String photoName = appName + "-" + format.format(new Date()) + ".jpg";// 生成照片名称
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
		// Activity.RESULT_CANCELED|Activity.RESULT_OK
192
		// Activity.RESULT_CANCELED|Activity.RESULT_OK
187
		if (func == Function.scanQrCode) {
193
		if (func == Function.scanQrCode) {
188
			if (resultCode == Activity.RESULT_OK) {
194
			if (resultCode == Activity.RESULT_OK) {
193
		} else if (func.equals(Function.getPhoto)) {
199
		} else if (func.equals(Function.getPhoto)) {
194
			// 照相功能
200
			// 照相功能
195
			if (resultCode == Activity.RESULT_OK) {
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
		} else if (func.equals(Function.getPicture)) {// 从媒体库中获取
238
		} else if (func.equals(Function.getPicture)) {// 从媒体库中获取
228
			if (resultCode == Activity.RESULT_OK) {
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
	public Bitmap getBitmapByImage(String imagePath){
301
	public Bitmap getBitmapByImage(String imagePath){
279
		BitmapFactory.Options opts = getBitmapOptions();
302
		BitmapFactory.Options opts = getBitmapOptions();
280
		BitmapFactory.decodeFile(imagePath, opts);
303
		BitmapFactory.decodeFile(imagePath, opts);
281
		opts.inSampleSize = MobileGraphics.computeSampleSize(opts, -1, 800 * 480);
304
		opts.inSampleSize = MobileGraphics.computeSampleSize(opts, -1, MAX_PIXELS);
282
		opts.inJustDecodeBounds = false;// 还原
305
		opts.inJustDecodeBounds = false;// 还原
283
		Bitmap bitmap = null;
306
		Bitmap bitmap = null;
284
		try {
307
		try {