赞
踩
-
-
- /**
- * Author : 马占柱
- * E-mail : mazhanzhu_3351@163.com
- * Time : 2019/5/19 9:30
- * Desc : Base64工具类
- */
- public class Base64Util {
- public static final String TAG = "Base64Util";
- private static final char last2byte = (char) Integer.parseInt("00000011", 2);
- private static final char last4byte = (char) Integer.parseInt("00001111", 2);
- private static final char last6byte = (char) Integer.parseInt("00111111", 2);
- private static final char lead6byte = (char) Integer.parseInt("11111100", 2);
- private static final char lead4byte = (char) Integer.parseInt("11110000", 2);
- private static final char lead2byte = (char) Integer.parseInt("11000000", 2);
- private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
- //取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
- public static String Mzz_File = BaseApplication.getContext().getExternalCacheDir().getAbsolutePath();
-
- public static void gcBitmap(Bitmap bitmap) {
- if (bitmap != null && !bitmap.isRecycled()) {
- bitmap.recycle(); // 回收图片所占的内存
- bitmap = null;
- System.gc(); // 提醒系统及时回收
- }
- }
-
- /**
- * Bitmap To Base64
- */
- public static String bitmapToBase64(Bitmap bitmap) {
- // 要返回的字符串
- String reslut = null;
- ByteArrayOutputStream baos = null;
- try {
- if (bitmap != null) {
- baos = new ByteArrayOutputStream();
- //压缩只对保存有效果bitmap还是原来的大小
- bitmap.compress(Bitmap.CompressFormat.JPEG, 30, baos);
- baos.flush();
- baos.close();
- // 转换为字节数组
- byte[] byteArray = baos.toByteArray();
- // 转换为字符串
- reslut = Base64.encodeToString(byteArray, Base64.NO_WRAP);
- } else {
- return null;
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (baos != null) {
- baos.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return reslut;
- }
-
- /**
- * Bitmap To Bitmap
- */
- public static Bitmap base64ToBitmap(String base64String) {
- byte[] decode = Base64.decode(base64String, Base64.DEFAULT);
- Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
- return bitmap;
- }
-
- /**
- * Bitmap 转化为 二维数组
- */
- public static byte[] getBytesByBitmap(Bitmap bitmap) {
- try {
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bitmap.getByteCount());
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
- return outputStream.toByteArray();
- } catch (Exception e) {
- return new byte[10];
- }
- }
-
- /**
- * 文件 转 base64字符串
- */
- public static String fileToBase64(File file) {
- String base64 = null;
- try {
- InputStream in = new FileInputStream(file);
- byte[] bytes = new byte[in.available()];
- int length = in.read(bytes);
- base64 = Base64.encodeToString(bytes, 0, length, Base64.DEFAULT);
- in.close();
- } catch (Exception e) {
- }
- return base64;
- }
-
- /**
- * Bitmap 转 文件
- */
- public static File bitmapToFile(Bitmap bitmap) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- //第二个参数是压缩比重,图片存储在磁盘上的大小会根据这个值变化。值越小存储在磁盘的图片文件越小,
- bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
- File fileDir = new File(Base64Util.Mzz_File);
- if (!fileDir.exists()) {
- fileDir.mkdirs();
- }
- File file = new File(Mzz_File, System.currentTimeMillis() + "压缩图片_Mzz.jpg");
- try {
- FileOutputStream fos = new FileOutputStream(file);
- InputStream is = new ByteArrayInputStream(baos.toByteArray());
- int x = 0;
- byte[] b = new byte[1024 * 100];
- while ((x = is.read(b)) != -1) {
- fos.write(b, 0, x);
- }
- fos.close();
- } catch (Exception e) {
- Log_Ma.e(TAG, e.toString());
- e.printStackTrace();
- }
- return file;
- }
-
- public static String encode(byte[] from) {
- StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3);
- int num = 0;
- char currentByte = 0;
-
- int i;
- for (i = 0; i < from.length; ++i) {
- for (num %= 8; num < 8; num += 6) {
- switch (num) {
- case 0:
- currentByte = (char) (from[i] & lead6byte);
- currentByte = (char) (currentByte >>> 2);
- case 1:
- case 3:
- case 5:
- default:
- break;
- case 2:
- currentByte = (char) (from[i] & last6byte);
- break;
- case 4:
- currentByte = (char) (from[i] & last4byte);
- currentByte = (char) (currentByte << 2);
- if (i + 1 < from.length) {
- currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6);
- }
- break;
- case 6:
- currentByte = (char) (from[i] & last2byte);
- currentByte = (char) (currentByte << 4);
- if (i + 1 < from.length) {
- currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4);
- }
- }
-
- to.append(encodeTable[currentByte]);
- }
- }
-
- if (to.length() % 4 != 0) {
- for (i = 4 - to.length() % 4; i > 0; --i) {
- to.append("=");
- }
- }
-
- return to.toString();
- }
-
- /**
- * @param key 加密秘钥
- * @param filepath 源文件地址
- */
- public static Map<String, String> IMG_Jiami(int key, String filepath) {
- File fileDir = new File(Base64Util.Mzz_File);
- if (!fileDir.exists()) {
- fileDir.mkdirs();
- }
- File file = new File(fileDir, System.currentTimeMillis() + "_Mzz.jpg");
- String path_jiami;
- long available = 0;
- try {
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filepath));
- available = bis.available();
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getPath()));
- int b;
- while ((b = bis.read()) != -1) {
- bos.write(b ^ key);
- }
- path_jiami = file.getPath();
- bis.close();
- bos.close();
- } catch (Exception e) {
- path_jiami = filepath;
- }
- Map<String, String> map = new HashMap<>();
- map.put("path", path_jiami);
- map.put("size", available + "");
- return map;
- }
-
- /**
- * 获取视频封面
- */
- public static Bitmap getVideoThumb(String path) {
- MediaMetadataRetriever media = new MediaMetadataRetriever();
- media.setDataSource(path);
- return media.getFrameAtTime();
- }
-
- /**
- * 获取视频时长
- */
- public static long getLocalVideoDuration(String videoPath) {
- int duration;
- try {
- MediaMetadataRetriever mmr = new MediaMetadataRetriever();
- mmr.setDataSource(videoPath);
- duration = Integer.parseInt(mmr.extractMetadata
- (MediaMetadataRetriever.METADATA_KEY_DURATION));
- } catch (Exception e) {
- e.printStackTrace();
- return 0;
- }
- return duration;
- }
-
- /**
- * @return view的截图,在InVisible时也可以获取到bitmap
- */
- public static Bitmap getViewBitmap(View view) {
- view.measure(View.MeasureSpec.makeMeasureSpec(view.getMeasuredWidth(), View.MeasureSpec.EXACTLY),
- View.MeasureSpec.makeMeasureSpec(view.getMeasuredHeight(), View.MeasureSpec.EXACTLY));
- view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
- view.setDrawingCacheEnabled(true);
- view.buildDrawingCache(true);
- return view.getDrawingCache(true);
- }
-
- /**
- * 获取系统相册文件路径
- */
- public static File getDCIMDirectory() {
- File dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
- if (!dcim.exists()) {
- dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
- }
- return dcim;
- }
-
- /**
- * 根据绝对路径得到图片的宽高,亲测比楼上速度快几十倍
- *
- * @param path 绝对路径!绝对路径!绝对路径!
- * @return 宽高
- */
- public static int[] getImageWidthHeight(String path) {
- try {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeFile(path, options);
- return new int[]{options.outWidth, options.outHeight};
- } catch (Exception e) {
- e.printStackTrace();
- }
- return new int[]{0, 0};
- }
-
- /**
- * 根据相对路径获取图片宽高
- *
- * @param c 上下文
- * @param uri 图片uri地址
- * @return 宽高信息
- */
-
- public static int[] getImageWidthHeight(Context c, Uri uri) {
- try {
- ParcelFileDescriptor parcelFileDescriptor = c.getContentResolver()
- .openFileDescriptor(uri, "r");
- if (parcelFileDescriptor != null) {
- FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
- Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
- parcelFileDescriptor.close();
- return new int[]{image.getWidth(), image.getHeight()};
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return new int[]{0, 0};
- }
-
- /**
- * @param context
- * @param filePath 路径
- * @param reqWidth 要求压缩的宽
- * @param reqHeight 要求压缩的高
- * @return
- */
- public static Bitmap getSmallBitmap(Context context, String filePath, int reqWidth, int reqHeight) {
- final BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;//只解析图片边沿,获取宽高
- // 计算缩放比
- options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
- // 完整解析图片返回bitmap
- options.inJustDecodeBounds = false;
- return BitmapFactory.decodeFile(filePath, options);
- }
-
- /**
- * @param context
- * @param filePath 路径
- * @param reqWidth 要求压缩的宽
- * @param reqHeight 要求压缩的高
- * @return
- */
- public static Bitmap getSmallBitmap(Context context, int filePath, int reqWidth, int reqHeight) {
- final BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;//只解析图片边沿,获取宽高
- // 计算缩放比
- options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
- // 完整解析图片返回bitmap
- options.inJustDecodeBounds = false;
- return BitmapFactory.decodeResource(context.getResources(), filePath, options);
- }
-
- public static int calculateInSampleSize(BitmapFactory.Options options,
- int reqWidth, int reqHeight) {
- final int height = options.outHeight;
- final int width = options.outWidth;
- int inSampleSize = 1;
- if (height > reqHeight || width > reqWidth) {
- final int heightRatio = Math.round((float) height / (float) reqHeight);
- final int widthRatio = Math.round((float) width / (float) reqWidth);
- inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
- }
- return inSampleSize;
- }
- }
-

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。