Android图片相关的操作
/**
* Tools for handler picture
*
* @author Ryan.Tang
*
*/
public final class ImageTools {
/**
* Transfer drawable to bitmap
*
* @param drawable
* @return
*/
public static Bitmap drawableToBitmap (Drawable drawable) {
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0 , 0 , w, h);
drawable.draw(canvas);
return bitmap;
}
/**
* Bitmap to drawable
*
* @param bitmap
* @return
*/
public static Drawable bitmapToDrawable (Bitmap bitmap) {
return new BitmapDrawable(bitmap);
}
/**
* Input stream to bitmap
*
* @param inputStream
* @return
* @throws Exception
*/
public static Bitmap inputStreamToBitmap (InputStream inputStream)
throws Exception {
return BitmapFactory.decodeStream(inputStream);
}
/**
* Byte transfer to bitmap
*
* @param byteArray
* @return
*/
public static Bitmap byteToBitmap (byte [] byteArray) {
if (byteArray.length != 0 ) {
return BitmapFactory
.decodeByteArray(byteArray, 0 , byteArray.length);
} else {
return null ;
}
}
/**
* Byte transfer to drawable
*
* @param byteArray
* @return
*/
public static Drawable byteToDrawable (byte [] byteArray) {
ByteArrayInputStream ins = null ;
if (byteArray != null ) {
ins = new ByteArrayInputStream(byteArray);
}
return Drawable.createFromStream(ins, null );
}
/**
* Bitmap transfer to bytes
*
* @param byteArray
* @return
*/
public static byte [] bitmapToBytes (Bitmap bm) {
byte [] bytes = null ;
if (bm != null ) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100 , baos);
bytes = baos.toByteArray();
}
return bytes;
}
/**
* Drawable transfer to bytes
*
* @param drawable
* @return
*/
public static byte [] drawableToBytes (Drawable drawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
byte [] bytes = bitmapToBytes(bitmap);
;
return bytes;
}
/**
* Base64 to byte[]
// */
/**
* Create reflection images
*
* @param bitmap
* @return
*/
public static Bitmap createReflectionImageWithOrigin (Bitmap bitmap) {
final int reflectionGap = 4 ;
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1 , -1 );
Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0 , h / 2 , w,
h / 2 , matrix, false );
Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2 ),
Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0 , 0 , null );
Paint deafalutPaint = new Paint();
canvas.drawRect(0 , h, w, h + reflectionGap, deafalutPaint);
canvas.drawBitmap(reflectionImage, 0 , h + reflectionGap, null );
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0 , bitmap.getHeight(), 0 ,
bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff ,
0x00ffffff , TileMode.CLAMP);
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0 , h, w, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
/**
* Get rounded corner images
*
* @param bitmap
* @param roundPx
* 5 10
* @return
*/
public static Bitmap getRoundedCornerBitmap (Bitmap bitmap, float roundPx) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242 ;
final Paint paint = new Paint();
final Rect rect = new Rect(0 , 0 , w, h);
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true );
canvas.drawARGB(0 , 0 , 0 , 0 );
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
/**
* Resize the bitmap
*
* @param bitmap
* @param width
* @param height
* @return
*/
public static Bitmap zoomBitmap (Bitmap bitmap, int width, int height) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidth = ((float ) width / w);
float scaleHeight = ((float ) height / h);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0 , 0 , w, h, matrix, true );
return newbmp;
}
/**
* Resize the drawable
* @param drawable
* @param w
* @param h
* @return
*/
public static Drawable zoomDrawable (Drawable drawable, int w, int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);
Matrix matrix = new Matrix();
float sx = ((float ) w / width);
float sy = ((float ) h / height);
matrix.postScale(sx, sy);
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0 , 0 , width, height,
matrix, true );
return new BitmapDrawable(newbmp);
}
/**
* Get images from SD card by path and the name of image
* @param photoName
* @return
*/
public static Bitmap getPhotoFromSDCard (String path,String photoName){
Bitmap photoBitmap = BitmapFactory.decodeFile(path + "/" +photoName +".png" );
if (photoBitmap == null ) {
return null ;
}else {
return photoBitmap;
}
}
/**
* Check the SD card
* @return
*/
public static boolean checkSDCardAvailable (){
return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}
/**
* Get image from SD card by path and the name of image
* @param fileName
* @return
*/
public static boolean findPhotoFromSDCard (String path,String photoName){
boolean flag = false ;
if (checkSDCardAvailable()) {
File dir = new File(path);
if (dir.exists()) {
File folders = new File(path);
File photoFile[] = folders.listFiles();
for (int i = 0 ; i < photoFile.length; i++) {
String fileName = photoFile[i].getName().split("\\." )[0 ];
if (fileName.equals(photoName)) {
flag = true ;
}
}
}else {
flag = false ;
}
}else {
flag = false ;
}
return flag;
}
/**
* Save image to the SD card
* @param photoBitmap
* @param photoName
* @param path
*/
public static void savePhotoToSDCard (Bitmap photoBitmap,String path,String photoName){
if (checkSDCardAvailable()) {
File dir = new File(path);
if (!dir.exists()){
dir.mkdirs();
}
File photoFile = new File(path , photoName + ".png" );
FileOutputStream fileOutputStream = null ;
try {
fileOutputStream = new FileOutputStream(photoFile);
if (photoBitmap != null ) {
if (photoBitmap.compress(Bitmap.CompressFormat.PNG, 100 , fileOutputStream)) {
fileOutputStream.flush();
}
}
} catch (FileNotFoundException e) {
photoFile.delete();
e.printStackTrace();
} catch (IOException e) {
photoFile.delete();
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* Delete the image from SD card
* @param context
* @param path
* file:///sdcard/temp.jpg
*/
public static void deleteAllPhoto (String path){
if (checkSDCardAvailable()) {
File folder = new File(path);
File[] files = folder.listFiles();
for (int i = 0 ; i < files.length; i++) {
files[i].delete();
}
}
}
public static void deletePhotoAtPathAndName (String path,String fileName){
if (checkSDCardAvailable()) {
File folder = new File(path);
File[] files = folder.listFiles();
for (int i = 0 ; i < files.length; i++) {
if (files[i].getName().split("\\." )[0 ].equals(fileName)) {
files[i].delete();
}
}
}
}
}