drawable,bitmap,base64,file之间的转换

作者:某人_Valar
如需转载请保留原文链接;
不断整理中,大家有好的方法也可以在评论中写出。

drawable与bitmap之间转换
/**
* drawable转为bitmap
*/

//drawable文件夹下的文件res直接转为bitmap
Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.icon);  

//res转为drawable
Resource res = gerResource();
Drawable drawable = res.getDrawable(R.drawable.icon);

//普通drawable到bitmap
BitmapDrawable btDrawable = (BitmapDrawable) drawable ;
Bitmap bitmap = drawable.getBitmap();

//ImageView中的图像转为BitmapDrawable再到bitmap
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();

/**
*bitmap转为drawable
*/

//不过现在这种方法官方已经不推荐使用了
Drawable drawable1 = new BitmapDrawable(bitmap);

//取代new BitmapDrawable(bitmap)的也很简单
Drawable drawable2 = new BitmapDrawable(getResources(),bitmap);

bitmap与base64之间转换

bitmap与base64之间转化需要一个中间变量byte[]

/**
*bitmap转为base64
*/
//先将bitmap转为byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
byte[] bytes = baos.toByteArray();

//将byte[]转为base64
String myBase64 = Base64.encodeToString(bytes,Base64.DEFAULT);
/**
*base64转为bitmap
*/
byte[] bytes = Base64.decode(myBase64 , Base64.DEFAULT);
Bitmap myBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
drawable与base64之间转换
  • 需要通过bitmap充当中间介质,方法可参考上面所写的。
base64与file之间转换
/**
* base64字符串转化成文件(图片)
*/ 
public static boolean base64ToFile(String imgStr,String filePath) { 
    BASE64Decoder decoder = new BASE64Decoder();  
    try {  
      // Base64解码  
      byte[] b = decoder.decodeBuffer(imgStr);  
      for (int i = 0; i < b.length; ++i) {  
          if (b[i] < 0) {// 调整异常数据  
               b[i] += 256;  
          }  
      }  
      OutputStream out = new FileOutputStream(filePath);  
      out.write(b);  
      out.flush();  
      out.close();  
      return true;  
   } catch (Exception e) {  
      return false;  
   }   
}  
/**
* 图片文件转化成base64字符串  
*/
public static String fileToBase64(String imgFile) {
    InputStream in = null;  
    String base64 = null;
    // 读取图片字节数组  
    try {  
       if(imgFile==null||"".equals(imgFile)){  
             imgFile="uploaddir/file/default.png";  
       }  
       in = new FileInputStream(imgFile);  
       byte[] bytes = new byte[in.available()];
       int length = in.read(bytes);
       base64 = Base64.encodeToString(bytes, 0, length, Base64.DEFAULT);
    } catch (IOException e) {  
       e.printStackTrace();  
    }finally {
     //关闭输入流
        if (in != null) {
           try {
               in.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
        }
    }  
    return base64;
}  
bitmap与file之间转换
/**
* bitmap保存为file
*/
public static void bitmapToFile(String filePath, 
                    Bitmap bitmap, int quality) throws IOException {
    if (bitmap != null) {
        File file = new File(filePath.substring(0,
                filePath.lastIndexOf(File.separator)));
        if (!file.exists()) {
            file.mkdirs();
        }
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(filePath));
        bitmap.compress(CompressFormat.PNG, quality, bos);
        bos.flush();
        bos.close();
    }
}
/**
* file转为bitmap
*/
public static Bitmap fileToBitmap(String filePath) {
     Bitmap bitmap = BitmapFactory.decodeFile(filePath);
     return bitmap;
}

//如果图片过大,可能导致Bitmap对象装不下图片 
public static Bitmap fileToBitmap(String filePath, int scale) {
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inPurgeable = true; 
      options.inSampleSize = scale; 
      //将图片的长和宽缩小味原来的1/scale
      Bitmap bitmap=BitmapFactory.decodeFile(filePath,options); 
}
/**
* file转为bitmap(网上发现的另一种写法,主要区别在与这种是计算得到的scale)
*/
 public static Bitmap fileToBitmap(String filePath) throws IOException{  
        Bitmap b = null;  
        int IMAGE_MAX_SIZE = 600;  
        
        File f = new File(filePath);  
        if (f == null){  
            return null;  
        }  
        BitmapFactory.Options o = new BitmapFactory.Options();  
        o.inJustDecodeBounds = true;  
  
        FileInputStream fis = new FileInputStream(f);  
        BitmapFactory.decodeStream(fis, null, o);  
        fis.close();  
  
        int scale = 1;  
        //如果图片过大,可能导致Bitmap对象装不下图片 
        if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) {  
            //scale的计算
            scale = (int) Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));  
        }  
  
        //以一定的比例转为bitmap
        BitmapFactory.Options o2 = new BitmapFactory.Options();  
        o2.inSampleSize = scale;  
        fis = new FileInputStream(f);  
        b = BitmapFactory.decodeStream(fis, null, o2);  
        fis.close();  
        return b;  
    }   

你可能感兴趣的:(drawable,bitmap,base64,file之间的转换)