|
|
@@ -1,9 +1,12 @@
|
|
|
package com.miekir.ocr.ui;
|
|
|
|
|
|
import android.content.Context;
|
|
|
+import android.graphics.Bitmap;
|
|
|
+import android.graphics.BitmapFactory;
|
|
|
import android.net.Uri;
|
|
|
import android.text.TextUtils;
|
|
|
|
|
|
+import com.miekir.common.utils.SizeTool;
|
|
|
import com.miekir.mvp.presenter.BasePresenter;
|
|
|
import com.miekir.network.core.RetrofitHelper;
|
|
|
import com.miekir.network.core.base.BaseObserver;
|
|
|
@@ -12,7 +15,9 @@ import com.miekir.ocr.api.ApiService;
|
|
|
import com.miekir.ocr.bean.OcrResult;
|
|
|
import com.miekir.ocr.tool.Base64Tool;
|
|
|
import com.miekir.ocr.tool.DateTool;
|
|
|
+import com.miekir.ocr.tool.ImageUtil;
|
|
|
|
|
|
+import java.io.File;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
@@ -91,20 +96,42 @@ public class OperationPresenter extends BasePresenter<IOperationView> {
|
|
|
/**
|
|
|
*
|
|
|
* @param context
|
|
|
- * @param filePath 图片路径
|
|
|
+ * @param rawPhotoBytes 原图
|
|
|
* @param scene 识别场景类型
|
|
|
*/
|
|
|
- public void startOcrFromFile(Context context, String filePath, String scene) {
|
|
|
+ public void startOcrFromFile(Context context, byte[] rawPhotoBytes, int[] rectData, File file, String scene) {
|
|
|
getView().showLoading(context.getResources().getString(R.string.loading));
|
|
|
+ int mLeft = rectData[0];
|
|
|
+ int mTop = rectData[1];
|
|
|
+ int mRight = rectData[2];
|
|
|
+ int mBottom = rectData[3];
|
|
|
Observable.create(new ObservableOnSubscribe<String>() {
|
|
|
@Override
|
|
|
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
|
|
|
- // 根据URI获取图片的base64字符串
|
|
|
- String photoBase64 = Base64Tool.getBase64FromFilePath(filePath);
|
|
|
- if (TextUtils.isEmpty(photoBase64)) {
|
|
|
- emitter.onError(new Exception("Empty image"));
|
|
|
+ Bitmap originalBmp = BitmapFactory.decodeByteArray(rawPhotoBytes , 0, rawPhotoBytes.length);
|
|
|
+ // 这里由于要快速拍照,使用的格式是ImageFormat.YUV_420_888,导致拍出来的照片自动逆时针90度,所以要转换裁剪位置
|
|
|
+ int newLeft = mTop*originalBmp.getHeight()/ SizeTool.SCREEN_WIDTH;
|
|
|
+ int newTop = (SizeTool.SCREEN_WIDTH-mRight)*originalBmp.getHeight()/ SizeTool.SCREEN_WIDTH;
|
|
|
+ int newWidth = (mBottom-mTop)*originalBmp.getHeight()/ SizeTool.SCREEN_WIDTH;
|
|
|
+ int newHeight = (mRight-mLeft)*originalBmp.getHeight()/ SizeTool.SCREEN_WIDTH;
|
|
|
+ Bitmap croppedBmp = Bitmap.createBitmap(originalBmp, newLeft, newTop, newWidth, newHeight);
|
|
|
+ // 旋转90度,让OCR可以识别
|
|
|
+ Bitmap rotatedBitmap = ImageUtil.rotateBitmap90(croppedBmp);
|
|
|
+ boolean saveCropSuccess = ImageUtil.saveBitmapFile(rotatedBitmap, file);
|
|
|
+ originalBmp.recycle();
|
|
|
+ croppedBmp.recycle();
|
|
|
+ rotatedBitmap.recycle();
|
|
|
+ if (saveCropSuccess) {
|
|
|
+ // 保存最终截图成功
|
|
|
+ // 根据URI获取图片的base64字符串
|
|
|
+ String photoBase64 = Base64Tool.getBase64FromFilePath(file.getAbsolutePath());
|
|
|
+ if (TextUtils.isEmpty(photoBase64)) {
|
|
|
+ emitter.onError(new Exception("Empty image"));
|
|
|
+ } else {
|
|
|
+ emitter.onNext(photoBase64);
|
|
|
+ }
|
|
|
} else {
|
|
|
- emitter.onNext(photoBase64);
|
|
|
+ emitter.onNext("Crop photo error");
|
|
|
}
|
|
|
}})
|
|
|
/*.filter(base64String -> {
|