图片工具类,可用于Bitmap, byte array, Drawable之间进行转换以及图片缩放,目前功能薄弱,后面会进行增强。如:
bitmapToDrawable(Bitmap b) bimap转换为drawable
drawableToBitmap(Drawable d) drawable转换为bitmap
drawableToByte(Drawable d) drawable转换为byte
bitmapToDrawable(Bitmap b) bimap转换为drawable
drawableToBitmap(Drawable d) drawable转换为bitmap
drawableToByte(Drawable d) drawable转换为byte
scaleImage(Bitmap org, float scaleWidth, float scaleHeight) 缩放图片
package cn.trinea.android.common.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
/**
* ImageUtils
* <ul>
* convert between Bitmap, byte array, Drawable
* <li>{@link #bitmapToByte(Bitmap)}</li>
* <li>{@link #bitmapToDrawable(Bitmap)}</li>
* <li>{@link #byteToBitmap(byte[])}</li>
* <li>{@link #byteToDrawable(byte[])}</li>
* <li>{@link #drawableToBitmap(Drawable)}</li>
* <li>{@link #drawableToByte(Drawable)}</li>
* </ul>
* <ul>
* get image
* <li>{@link #getInputStreamFromUrl(String, int)}</li>
* <li>{@link #getBitmapFromUrl(String, int)}</li>
* <li>{@link #getDrawableFromUrl(String, int)}</li>
* </ul>
* <ul>
* scale image
* <li>{@link #scaleImageTo(Bitmap, int, int)}</li>
* <li>{@link #scaleImage(Bitmap, float, float)}</li>
* </ul>
*
* @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-6-27
*/
public class ImageUtils {
private ImageUtils() {
throw new AssertionError();
}
/**
* convert Bitmap to byte array
*
* @param b
* @return
*/
public static byte[] bitmapToByte(Bitmap b) {
if (b == null) {
return null;
}
ByteArrayOutputStream o = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, o);
return o.toByteArray();
}
/**
* convert byte array to Bitmap
*
* @param b
* @return
*/
public static Bitmap byteToBitmap(byte[] b) {
return (b == null || b.length == 0) ? null : BitmapFactory.decodeByteArray(b, 0, b.length);
}
/**
* convert Drawable to Bitmap
*
* @param d
* @return
*/
public static Bitmap drawableToBitmap(Drawable d) {
return d == null ? null : ((BitmapDrawable)d).getBitmap();
}
/**
* convert Bitmap to Drawable
*
* @param b
* @return
*/
public static Drawable bitmapToDrawable(Bitmap b) {
return b == null ? null : new BitmapDrawable(b);
}
/**
* convert Drawable to byte array
*
* @param d
* @return
*/
public static byte[] drawableToByte(Drawable d) {
return bitmapToByte(drawableToBitmap(d));
}
/**
* convert byte array to Drawable
*
* @param b
* @return
*/
public static Drawable byteToDrawable(byte[] b) {
return bitmapToDrawable(byteToBitmap(b));
}
/**
* get input stream from network by imageurl, you need to close inputStream yourself
*
* @param imageUrl
* @param readTimeOutMillis
* @return
* @see ImageUtils#getInputStreamFromUrl(String, int, boolean)
*/
public static InputStream getInputStreamFromUrl(String imageUrl, int readTimeOutMillis) {
return getInputStreamFromUrl(imageUrl, readTimeOutMillis, null);
}
/**
* get input stream from network by imageurl, you need to close inputStream yourself
*
* @param imageUrl
* @param readTimeOutMillis read time out, if less than 0, not set, in mills
* @param requestProperties http request properties
* @return
* @throws MalformedURLException
* @throws IOException
*/
public static InputStream getInputStreamFromUrl(String imageUrl, int readTimeOutMillis,
Map<String, String> requestProperties) {
InputStream stream = null;
try {
URL url = new URL(imageUrl);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
HttpUtils.setURLConnection(requestProperties, con);
if (readTimeOutMillis > 0) {
con.setReadTimeout(readTimeOutMillis);
}
stream = con.getInputStream();
} catch (MalformedURLException e) {
closeInputStream(stream);
throw new RuntimeException("MalformedURLException occurred. ", e);
} catch (IOException e) {
closeInputStream(stream);
throw new RuntimeException("IOException occurred. ", e);
}
return stream;
}
/**
* get drawable by imageUrl
*
* @param imageUrl
* @param readTimeOutMillis
* @return
* @see ImageUtils#getDrawableFromUrl(String, int, boolean)
*/
public static Drawable getDrawableFromUrl(String imageUrl, int readTimeOutMillis) {
return getDrawableFromUrl(imageUrl, readTimeOutMillis, null);
}
/**
* get drawable by imageUrl
*
* @param imageUrl
* @param readTimeOutMillis read time out, if less than 0, not set, in mills
* @param requestProperties http request properties
* @return
*/
public static Drawable getDrawableFromUrl(String imageUrl, int readTimeOutMillis,
Map<String, String> requestProperties) {
InputStream stream = getInputStreamFromUrl(imageUrl, readTimeOutMillis, requestProperties);
Drawable d = Drawable.createFromStream(stream, "src");
closeInputStream(stream);
return d;
}
/**
* get Bitmap by imageUrl
*
* @param imageUrl
* @param readTimeOut
* @return
* @see ImageUtils#getBitmapFromUrl(String, int, boolean)
*/
public static Bitmap getBitmapFromUrl(String imageUrl, int readTimeOut) {
return getBitmapFromUrl(imageUrl, readTimeOut, null);
}
/**
* get Bitmap by imageUrl
*
* @param imageUrl
* @param requestProperties http request properties
* @return
*/
public static Bitmap getBitmapFromUrl(String imageUrl, int readTimeOut, Map<String, String> requestProperties) {
InputStream stream = getInputStreamFromUrl(imageUrl, readTimeOut, requestProperties);
Bitmap b = BitmapFactory.decodeStream(stream);
closeInputStream(stream);
return b;
}
/**
* scale image
*
* @param org
* @param newWidth
* @param newHeight
* @return
*/
public static Bitmap scaleImageTo(Bitmap org, int newWidth, int newHeight) {
return scaleImage(org, (float)newWidth / org.getWidth(), (float)newHeight / org.getHeight());
}
/**
* scale image
*
* @param org
* @param scaleWidth sacle of width
* @param scaleHeight scale of height
* @return
*/
public static Bitmap scaleImage(Bitmap org, float scaleWidth, float scaleHeight) {
if (org == null) {
return null;
}
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
return Bitmap.createBitmap(org, 0, 0, org.getWidth(), org.getHeight(), matrix, true);
}
/**
* close inputStream
*
* @param s
*/
private static void closeInputStream(InputStream s) {
if (s == null) {
return;
}
try {
s.close();
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
}
}
}