|
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;
}
}
|