android 通过图片url获取宽高_android 根据图片url获取bitmap或者drawable,然后再进行压缩处理...

这个博客介绍了如何在Android中从图片URL获取Bitmap和Drawable对象,并提供了压缩图片的工具类。该类包含根据URL获取图片、设定图片类型、以及按比例和质量进行压缩的方法。
摘要由CSDN通过智能技术生成

1.通过图片url生成Bitmap对象和Drawable对象。

2.对网络上获取到的图片进行压缩处理。

下面提供一个工具类,以后就可以直接拿来用了。

本文为第一代码(diyidaima.com)原创,转载需注明出处

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.drawable.Drawable;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

public class ImageUtils {

private int

picType;//0表示默认png图片;1表示jpg或者jpeg

public static ImageUtils

getIntance(){

return new ImageUtils();

}

public void

setPicType(int picType) {

this.picType = picType;

}

public Bitmap

compressImage(Bitmap image) {

ByteArrayOutputStream baos =

new ByteArrayOutputStream();

Bitmap.CompressFormat

Type=picType==0?Bitmap.CompressFormat.PNG:Bitmap.CompressFormat.JPEG;

//image.compress(Bitmap.CompressFormat.JPEG, 100,

baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

image.compress(Type, 100,

baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

int options = 100;

while (baos.toByteArray().length / 1024

> 100) {

//循环判断如果压缩后图片是否大于100kb,大于继续压缩

baos.reset();//重置baos即清空baos

image.compress(Bitmap.CompressFormat.JPEG,

options,

baos);//这里压缩options%,把压缩后的数据存放到baos中

options -=

10;//每次都减少10

}

ByteArrayInputStream isBm = new

ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中

Bitmap bitmap = BitmapFactory.decodeStream(isBm,

null,

null);//把ByteArrayInputStream数据生成图片

return bitmap;

}

public Bitmap getimage(String

srcPath) {

BitmapFactory.Options newOpts = new

BitmapFactory.Options();

//开始读入图片,此时把options.inJustDecodeBounds

设回true了

newOpts.inJustDecodeBounds = true;

Bitmap bitmap = BitmapFactory.decodeFile(srcPath,

newOpts);//此时返回bm为空

newOpts.inJustDecodeBounds =

false;

int w = newOpts.outWidth;

int h = newOpts.outHeight;

//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

float hh =

800f;//这里设置高度为800f

float ww =

480f;//这里设置宽度为480f

//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

int be =

1;//be=1表示不缩放

if (w > h

&& w > ww)

{//如果宽度大的话根据宽度固定大小缩放

be = (int)

(newOpts.outWidth / ww);

} else if (w < h

&& h > hh)

{//如果高度高的话根据宽度固定大小缩放

be = (int)

(newOpts.outHeight / hh);

}

if (be <= 0)

be =

1;

newOpts.inSampleSize =

be;//设置缩放比例

//重新读入图片,注意此时已经把options.inJustDecodeBounds

设回false了

bitmap = BitmapFactory.decodeFile(srcPath,

newOpts);

return

compressImage(bitmap);//压缩好比例大小后再进行质量压缩

}

public Bitmap comp(Bitmap

image) {

ByteArrayOutputStream baos =

new ByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG, 100,

baos);

if (baos.toByteArray().length / 1024

> 1024)

{//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出

baos.reset();//重置baos即清空baos

Bitmap.CompressFormat

Type=picType==0?Bitmap.CompressFormat.PNG:Bitmap.CompressFormat.JPEG;

//image.compress(Bitmap.CompressFormat.JPEG, 50,

baos);//这里压缩50%,把压缩后的数据存放到baos中

image.compress(Type, 50,

baos);//这里压缩50%,把压缩后的数据存放到baos中

}

ByteArrayInputStream isBm = new

ByteArrayInputStream(baos.toByteArray());

BitmapFactory.Options newOpts = new

BitmapFactory.Options();

//开始读入图片,此时把options.inJustDecodeBounds

设回true了

newOpts.inJustDecodeBounds = true;

Bitmap bitmap = BitmapFactory.decodeStream(isBm,

null, newOpts);

newOpts.inJustDecodeBounds = false;

int w = newOpts.outWidth;

int h = newOpts.outHeight;

//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

float hh =

800f;//这里设置高度为800f

float ww =

480f;//这里设置宽度为480f

//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

int be =

1;//be=1表示不缩放

if (w > h

&& w > ww)

{//如果宽度大的话根据宽度固定大小缩放

be = (int)

(newOpts.outWidth / ww);

} else if (w < h

&& h > hh)

{//如果高度高的话根据宽度固定大小缩放

be = (int)

(newOpts.outHeight / hh);

}

if (be <= 0)

be =

1;

newOpts.inSampleSize =

be;//设置缩放比例

//重新读入图片,注意此时已经把options.inJustDecodeBounds

设回false了

isBm = new

ByteArrayInputStream(baos.toByteArray());

bitmap = BitmapFactory.decodeStream(isBm, null,

newOpts);

return

compressImage(bitmap);//压缩好比例大小后再进行质量压缩

}

public void

getPicTypeByUrl(String url){

if(url==null){

return;

}

if(url.equals("")){

return;

}

String[] picArray=url.split("/");

String picStr="";

if(picArray.length>0){

picStr=picArray[picArray.length-1];

}else{

picStr=picArray[0];

}

if(picStr.toLowerCase().contains(".png")){

picType=0;

}else

if(picStr.toLowerCase().contains(".jpg")||picStr.toLowerCase().contains(".jpeg")){

picType=1;

}

}

public static Bitmap

getBitMBitmap(String urlpath) {

Bitmap map = null;

try {

URL url =

new URL(urlpath);

URLConnection conn = url.openConnection();

conn.connect();

InputStream

in;

in =

conn.getInputStream();

map =

BitmapFactory.decodeStream(in);

} catch (IOException e) {

e.printStackTrace();

}

return map;

}

public static Drawable

getDrawable(String urlpath){

Drawable drawable = null;

try {

URL url =

new URL(urlpath);

URLConnection conn = url.openConnection();

conn.connect();

InputStream

in;

in =

conn.getInputStream();

drawable =

Drawable.createFromStream(in, "background.jpg");

} catch (IOException e) {

e.printStackTrace();

}

return drawable;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值