zoukankan      html  css  js  c++  java
  • Android实现图片的压缩、旋转工具类

    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.media.ExifInterface;
    import android.util.Base64;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    
    /**
     * Created by Administrator on 2017/12/22.
     */
    public class BitMapUtils {
    
        //计算图片的缩放值
        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;
        }
    
        // 根据路径获得图片并压缩,返回bitmap用于显示
        public static Bitmap getSmallBitmap(String filePath) {
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;//只加载图像框架
            BitmapFactory.decodeFile(filePath, options);
    
            // 计算该图像压缩比例
            options.inSampleSize = calculateInSampleSize(options, 480, 800);
    
            //设置加载全部图像内容
            options.inJustDecodeBounds = false;
            return BitmapFactory.decodeFile(filePath, options);
        }
    
        //把bitmap转换成String
        public static String bitmapToString(String filePath) {
            Bitmap bm = getSmallBitmap(filePath);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
            byte[] b = baos.toByteArray();
            return Base64.encodeToString(b, Base64.DEFAULT);
        }
    
        //旋转照片
        public static Bitmap rotateBitmap(Bitmap bitmap,int degress) {
            if (bitmap != null) {
                Matrix m = new Matrix();
                m.postRotate(degress);
                bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
                        bitmap.getHeight(), m, true);
                return bitmap;
            }
            return bitmap;
        }
    
        //判断照片角度
        public static int readPictureDegree(String path) {
            int degree = 0;
            try {
                ExifInterface exifInterface = new ExifInterface(path);
                int orientation = exifInterface.getAttributeInt(
                        ExifInterface.TAG_ORIENTATION,
                        ExifInterface.ORIENTATION_NORMAL);
                switch (orientation) {
                    case ExifInterface.ORIENTATION_ROTATE_90:
                        degree = 90;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_180:
                        degree = 180;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_270:
                        degree = 270;
                        break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return degree;
        }
    
    }
  • 相关阅读:
    Ubantu 查看系统资源占用
    C do {...} while (0) 在宏定义中的作用
    Redis架构设计
    Ubantu 安装boost环境
    Ubuntu 安装谷歌拼音输入法
    Ubuntu C/C++开发环境的安装和配置
    ubuntu 14.04英文环境设置成中文
    自己动手写可视化软件(代码已开源)
    探秘Tomcat——连接篇
    探秘Tomcat——连接器和容器的优雅启动
  • 原文地址:https://www.cnblogs.com/QQ862668193/p/8108489.html
Copyright © 2011-2022 走看看