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

这篇博客详细介绍了在Android开发中如何进行Drawable与Bitmap之间的转换,以及如何在Bitmap、Base64字符串和File之间相互转化。提供了实用的方法和代码示例,对于Android图像处理非常有帮助。
摘要由CSDN通过智能技术生成

作者:某人_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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值