No Description

ImageUtils.java 3.6KB

    package ai.pai.lensman.service; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.media.ExifInterface; import com.android.common.utils.LogHelper; public class ImageUtils { public static Bitmap decodeBitmapWithSize(String pathName, int width, int height) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; options.inInputShareable = true; options.inPurgeable = true; BitmapFactory.decodeFile(pathName, options); Matrix matrix = new Matrix(); int originWidth = options.outWidth; int originHeight = options.outHeight; LogHelper.dfile("czy","照片上传 原始宽度="+originWidth + "原始高度="+originHeight); float ratioW = ((float)originWidth)/width; float ratioH = ((float)originHeight)/height; float ratio = ratioW > ratioH ? ratioH :ratioW; matrix.postScale(1/ratio,1/ratio); options.inJustDecodeBounds = false; Bitmap sourceBm = BitmapFactory.decodeFile(pathName, options); return Bitmap.createBitmap(sourceBm,0,0,originWidth,originHeight,matrix,true); } public static Bitmap decodeBitmapWithSize(String pathName, int width, int height, boolean useBigger) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; options.inInputShareable = true; options.inPurgeable = true; BitmapFactory.decodeFile(pathName, options); int decodeWidth = width, decodeHeight = height; final int degrees = getImageDegrees(pathName); if (degrees == 90 || degrees == 270) { decodeWidth = height; decodeHeight = width; } if (useBigger) { options.inSampleSize = (int) Math.min(((float) options.outWidth / decodeWidth), ((float) options.outHeight / decodeHeight)); } else { options.inSampleSize = (int) Math.max(((float) options.outWidth / decodeWidth), ((float) options.outHeight / decodeHeight)); } options.inJustDecodeBounds = false; Bitmap sourceBm = BitmapFactory.decodeFile(pathName, options); return imageWithFixedRotation(sourceBm, degrees); } public static int getImageDegrees(String pathName) { int degrees = 0; try { ExifInterface exifInterface = new ExifInterface(pathName); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degrees = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degrees = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degrees = 270; break; } } catch (Exception e) { e.printStackTrace(); } return degrees; } public static Bitmap imageWithFixedRotation(Bitmap bm, int degrees) { if (bm == null || bm.isRecycled()) return null; if (degrees == 0) return bm; final Matrix matrix = new Matrix(); matrix.postRotate(degrees); Bitmap result = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); if (result != bm) bm.recycle(); return result; } }