android 图片处理工具类封装,Android图片处理工具类(持续积累补充)

package cn.mucang.android.community.utils;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Matrix;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

/**

* 图像工具类,用于裁剪、放大缩小、质量调整等...

* Created by Sanders on 2014/11/3.

*/

public class BitmapUtils {

/**

* 裁剪图片为当前指定的尺寸

*

* @param path

* @param newWidth  指定宽度

* @param newHeight 指定高度

* @return 返回宽度不大于指定宽度,高度不大于指定高度的Bitmap

*/

public static Bitmap tailorBitmap(String path, int newWidth, int newHeight) {

int maxSize = newWidth >= newHeight ? newWidth : newHeight;

Bitmap inBitmap = getValidationBitmap(path, maxSize);

return tailorBitmap(inBitmap, newWidth, newHeight);

}

/**

* 按最大边裁剪

*

* @param path

* @param maxSize

* @return

*/

public static Bitmap tailorBitmap(String path, int maxSize) {

Bitmap inBitmap = getValidationBitmap(path, maxSize);

return tailorBitmap(inBitmap, maxSize);

}

/**

* 参见图片为当前指定的尺寸

*

* @param inBitmap

* @param newWidth  指定宽度

* @param newHeight 指定高度

* @return 返回宽度不大于指定宽度,高度不大于指定高度的Bitmap

*/

public static Bitmap tailorBitmap(Bitmap inBitmap, int newWidth, int newHeight) {

float inWidth = inBitmap.getWidth();

float inHeight = inBitmap.getHeight();

float scale;

if (inWidth >= inHeight) {

scale = (float) newWidth / inWidth;

} else {

scale = (float) newHeight / inHeight;

}

if(scale == 1){

return inBitmap;

}

Matrix matrix = new Matrix();

matrix.postScale(scale, scale);

Bitmap newBitmap = Bitmap.createBitmap(inBitmap, 0, 0, (int) inWidth, (int) inHeight, matrix, true);

inBitmap.recycle();

return newBitmap;

}

/**

* 验证图像不要内存溢出,在操作前先缩小下

*

* @param path      文件路径

* @param inMaxSize 一条边的最大长度

* @return

*/

public static Bitmap getValidationBitmap(String path, int inMaxSize) {

BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

Bitmap bitmap = BitmapFactory.decodeFile(path, options);

int outWidth = options.outWidth;

int outHeight = options.outHeight;

int maxSize = outWidth >= outHeight ? outWidth : outHeight;

int sampleSize = maxSize / inMaxSize;

options.inSampleSize = sampleSize > 0 ? sampleSize : 1;

options.inJustDecodeBounds = false;

bitmap = BitmapFactory.decodeFile(path, options);

return bitmap;

}

/**

* 裁剪最大的边为传入边,最大边长不能大于maxSize

*

* @param inBitmap 位图

* @param maxSize  最大边长

* @return

*/

public static Bitmap tailorBitmap(Bitmap inBitmap, int maxSize) {

float inWidth = inBitmap.getWidth();

float inHeight = inBitmap.getHeight();

float scale;

if (inWidth >= inHeight) {

scale = (float) maxSize / inWidth;

} else {

scale = (float) maxSize / inHeight;

}

if(scale == 1){

return inBitmap;

}

Matrix matrix = new Matrix();

matrix.postScale(scale, scale);

Bitmap newBitmap = Bitmap.createBitmap(inBitmap, 0, 0, (int) inWidth, (int) inHeight, matrix, true);

inBitmap.recycle();

return newBitmap;

}

/**

* 保存bitmap为图片

*

* @param bitmap

* @param filePath

* @param fileName

* @return

* @throws java.io.IOException

*/

public static File saveBitmapToFile(Bitmap bitmap, String filePath, String fileName) throws IOException {

File file = new File(filePath, fileName + ".jpg");

FileOutputStream outputStream = new FileOutputStream(file);

bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream);

outputStream.close();

bitmap.recycle();

return file;

}

/**

* 将bitmap转换为Byte数组并压缩指定大小

*

* @param bitmap

* @param maxSize 指定大小

* @return

* @throws java.io.IOException

*/

public static byte[] getBitmapToBytes(Bitmap bitmap, long maxSize) throws IOException {

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

int options = 80;

bitmap.compress(Bitmap.CompressFormat.JPEG, options, outStream);

byte[] buffer = outStream.toByteArray();

while (buffer.length > maxSize) {

outStream.reset();

options -= 1;

bitmap.compress(Bitmap.CompressFormat.JPEG, options, outStream);

buffer = outStream.toByteArray();

}

outStream.close();

bitmap.recycle();

return buffer;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值