package com.example.imageskan.utils;
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.52ij.com" target="_blank">Trinea</a> 2012-6-27
*/
public class ImageUtils {
/**
* 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);//???缺少HttpUtils
// if (readTimeOutMillis > 0) {
// con.setReadTimeout(readTimeOutMillis);
// }
// stream = con.getInputStream();
// ///
// 从Internet获取网页,发送请求,将网页以流的形式读回来
if (con.getResponseCode() != 200) {
throw new RuntimeException("请求url失败");
} else {
// 得到网络返回的输入流
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);
}
}
}
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.52ij.com" target="_blank">Trinea</a> 2012-6-27
*/
public class ImageUtils {
/**
* 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);//???缺少HttpUtils
// if (readTimeOutMillis > 0) {
// con.setReadTimeout(readTimeOutMillis);
// }
// stream = con.getInputStream();
// ///
// 从Internet获取网页,发送请求,将网页以流的形式读回来
if (con.getResponseCode() != 200) {
throw new RuntimeException("请求url失败");
} else {
// 得到网络返回的输入流
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);
}
}
}