詹子聪 5 лет назад
Родитель
Сommit
6b8a638b3d

+ 4 - 22
app/src/main/java/com/miekir/ocr/ui/CameraActivity.java

@@ -5,8 +5,6 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.ImageFormat;
 import android.graphics.Point;
 import android.graphics.SurfaceTexture;
@@ -35,7 +33,6 @@ import android.view.TextureView;
 
 import androidx.annotation.NonNull;
 
-import com.miekir.common.utils.SizeTool;
 import com.miekir.ocr.R;
 import com.miekir.ocr.base.BaseCameraActivity;
 import com.miekir.ocr.tool.CameraPreviewTool;
@@ -452,24 +449,9 @@ public class CameraActivity extends BaseCameraActivity {
                 //FileManager.writeFrame(file.getAbsolutePath(), jpegData);
                 image.close();
 
-                // 得到裁剪后的图片
-                Bitmap originalBmp = BitmapFactory.decodeByteArray(jpegData , 0, jpegData.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);
-                if (saveCropSuccess) {
-                    // 上传识别
-                    onCropFinish(file.getAbsolutePath());
-                }
-                originalBmp.recycle();
-                croppedBmp.recycle();
-                rotatedBitmap.recycle();
+                // 得到裁剪后的图片数据
+                int[] rectData = new int[]{mLeft, mTop, mRight, mBottom};
+                onCropFinish(jpegData, rectData, file);
             }
 
             /*Image image = null;
@@ -507,7 +489,7 @@ public class CameraActivity extends BaseCameraActivity {
     /**
      * 裁剪完成,上传识别
      */
-    protected void onCropFinish(String path) {
+    protected void onCropFinish(byte[] rawPhotoBytes, int[] rectData, File file) {
 
     }
 }

+ 4 - 3
app/src/main/java/com/miekir/ocr/ui/OperationActivity.java

@@ -23,6 +23,7 @@ import com.miekir.ocr.widget.IndicatorText;
 import com.zhihu.matisse.Matisse;
 import com.zhihu.matisse.MimeType;
 
+import java.io.File;
 import java.util.List;
 
 /**
@@ -93,9 +94,9 @@ public class OperationActivity extends CameraActivity implements CropView.onLoca
     }
 
     @Override
-    protected void onCropFinish(String path) {
-        super.onCropFinish(path);
-        mOperationPresenter.startOcrFromFile(this, path, mCurrentScene);
+    protected void onCropFinish(byte[] rawPhotoBytes, int[] rectData, File file) {
+        super.onCropFinish(rawPhotoBytes, rectData, file);
+        mOperationPresenter.startOcrFromFile(this, rawPhotoBytes, rectData, file, mCurrentScene);
     }
 
     /**

+ 34 - 7
app/src/main/java/com/miekir/ocr/ui/OperationPresenter.java

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