package com.baidu.paddle.lite.demo.ocr; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Matrix; import android.media.ExifInterface; import android.os.Environment; import java.io.*; public class Utils { private static final String TAG = Utils.class.getSimpleName(); public static void copyFileFromAssets(Context appCtx, String srcPath, String dstPath) { if (srcPath.isEmpty() || dstPath.isEmpty()) { return; } InputStream is = null; OutputStream os = null; try { is = new BufferedInputStream(appCtx.getAssets().open(srcPath)); os = new BufferedOutputStream(new FileOutputStream(new File(dstPath))); byte[] buffer = new byte[1024]; int length = 0; while ((length = is.read(buffer)) != -1) { os.write(buffer, 0, length); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { os.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void copyDirectoryFromAssets(Context appCtx, String srcDir, String dstDir) { if (srcDir.isEmpty() || dstDir.isEmpty()) { return; } try { if (!new File(dstDir).exists()) { new File(dstDir).mkdirs(); } for (String fileName : appCtx.getAssets().list(srcDir)) { String srcSubPath = srcDir + File.separator + fileName; String dstSubPath = dstDir + File.separator + fileName; if (new File(srcSubPath).isDirectory()) { copyDirectoryFromAssets(appCtx, srcSubPath, dstSubPath); } else { copyFileFromAssets(appCtx, srcSubPath, dstSubPath); } } } catch (Exception e) { e.printStackTrace(); } } public static float[] parseFloatsFromString(String string, String delimiter) { String[] pieces = string.trim().toLowerCase().split(delimiter); float[] floats = new float[pieces.length]; for (int i = 0; i < pieces.length; i++) { floats[i] = Float.parseFloat(pieces[i].trim()); } return floats; } public static long[] parseLongsFromString(String string, String delimiter) { String[] pieces = string.trim().toLowerCase().split(delimiter); long[] longs = new long[pieces.length]; for (int i = 0; i < pieces.length; i++) { longs[i] = Long.parseLong(pieces[i].trim()); } return longs; } public static String getSDCardDirectory() { return Environment.getExternalStorageDirectory().getAbsolutePath(); } public static boolean isSupportedNPU() { return false; // String hardware = android.os.Build.HARDWARE; // return hardware.equalsIgnoreCase("kirin810") || hardware.equalsIgnoreCase("kirin990"); } public static Bitmap resizeWithStep(Bitmap bitmap, int maxLength, int step) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); int maxWH = Math.max(width, height); float ratio = 1; int newWidth = width; int newHeight = height; if (maxWH > maxLength) { ratio = maxLength * 1.0f / maxWH; newWidth = (int) Math.floor(ratio * width); newHeight = (int) Math.floor(ratio * height); } newWidth = newWidth - newWidth % step; if (newWidth == 0) { newWidth = step; } newHeight = newHeight - newHeight % step; if (newHeight == 0) { newHeight = step; } return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true); } public static Bitmap rotateBitmap(Bitmap bitmap, int orientation) { Matrix matrix = new Matrix(); switch (orientation) { case ExifInterface.ORIENTATION_NORMAL: return bitmap; case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: matrix.setScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_180: matrix.setRotate(180); break; case ExifInterface.ORIENTATION_FLIP_VERTICAL: matrix.setRotate(180); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_TRANSPOSE: matrix.setRotate(90); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_90: matrix.setRotate(90); break; case ExifInterface.ORIENTATION_TRANSVERSE: matrix.setRotate(-90); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_270: matrix.setRotate(-90); break; default: return bitmap; } try { Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); bitmap.recycle(); return bmRotated; } catch (OutOfMemoryError e) { e.printStackTrace(); return null; } } }