重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

android图片,android图片浏览器

android 图片质量压缩和尺寸压缩有什么区别

10年积累的网站设计、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有皇姑免费网站建设让你可以放心的选择与我们合作。

这个方法用来将特定格式的压缩图片写入输出流(OutputStream)中,当然例如输出流与文件联系在一起,压缩后的图片也就是一个文件。如果压缩成功则返回true,其中有三个参数:

format是压缩后的图片的格式,可取值:Bitmap.CompressFormat .JPEG、~.PNG、~.WEBP。

quality的取值范围为[0,100],值越小,经过压缩后图片失真越严重,当然图片文件也会越小。(PNG格式的图片会忽略这个值的设定)

stream指定压缩的图片输出的地方,比如某文件。

上述方法还有一个值得注意的地方是:当用BitmapFactory decode文件时可能返回一个跟原图片不同位深的图片,或者丢失了每个像素的透明值(alpha),比如说,JPEG格式的图片仅仅支持不透明的像素。文章android图片压缩在文末提到的下面这点可能就是这个原因:

当调用bitmap.compress(CompressFormat.JPEG, 100, fos);保存为图片时发现图片背景为黑色,如下图:

这时只需要改成用png保存就可以了,bitmap.compress(CompressFormat.PNG, 100, fos);,如下图:

下面是质量压缩的代码:

public static void compressBmpToFile(Bitmap bmp,File file){

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int options = 80;//个人喜欢从80开始,

bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);

while (baos.toByteArray().length / 1024  100) {

baos.reset();

options -= 10;

bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);

}

try {

FileOutputStream fos = new FileOutputStream(file);

fos.write(baos.toByteArray());

fos.flush();

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

这段代码来自Android图片压缩总结,我根据自己的需求改了改,但是大同小异,所以就直接贴了。

随着代码中的option逐渐变小,我们可以在logcat中打印baos的大小来查看图片的大小。我们也可以去掉while的循环条件,一直压缩下去看效果,最终一张照片可能就由原来的3、4M变成了几百K甚至几百B了。我在试的过程中将option设置成100,压缩后偶尔会出现一张3、4M的图片经过压缩后竟变成了6、7M,这里还是有点困惑,不知道为什么。

随后,我想把这个压缩后的图片(1、200KB)填充到ImageView中时却失败了,logcat中提示图片过大!这就是文章开头提到的问题,虽然我们通过质量压缩使File形式的图片文件缩小了,但是并没有改变图片的宽高,原先是1080*1920分辨率的图片经压缩后还是1080*1920,而File格式转换成Bitmap格式进入到内存中时,内存是根据图片的像素数量来给图片分配内存大小的,还是有好几M,因此填充ImageView失败。

顺便提一下,可以用bitmap.getByteCount()获取存储bitmap像素的内存大小,但是KITKAT(Android 4.4版本)以后用getAllocateByteCount()获取。一般情况下,后者返回值比前者大,比如,当bitmap被重用去decode另外更小的bitmaps时,或者被人为地配置一下属性值,比如setWidth()、setHeight()、reconfigure()时,如果bitmap不做以上操作,二者的返回值应该是一样的。(译文,不太懂)

二、尺寸压缩

特点: 通过设置采样率, 减少图片的像素, 达到对内存中的Bitmap进行压缩

我们主要通过BitmapFactory中的decodeFile方法对图片进行尺寸压缩:

public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

其中有两个参数:

pathName是图片文件的路径。

opts 就是所谓的采样率,它里边有很多属性可以设置,我们通过设置属性来达到根据自己的需要,压缩出指定的图片。其中比较常用的属性有:

boolean inJustDecodeBounds —— 如果设置为true,则只读取bitmap的宽高,而忽略内容。

int inSampleSize—— 如果1,调用decodeFile方法后,就会得到一个更小的bitmap对象(已压缩)。比如设置为2,那么新Bitmap的宽高都会是原Bitmap宽高的1/2,总体大小自然就是原来的1/4了,以此类推。

boolean inPurgeable—— 如果设置为true,压缩后的图片像素占的内存将会在系统清理内存的时候被回收掉,当像素的信息再次被用到时将会自动重新decode该像素(比如getPixels()时)。(慎用!重复decode可以会造成UI的卡顿,API level 21 已弃用)

boolean inInputShareable—— 与inPurgeable配合使用,如果inPurgeable设置成false,自动忽略此值,如果inPurgeable为true,此值决定是否该bitmap能分享引用给输入数据(inputstream,array等),或者必须进行深拷贝。API level 21 已弃用。(这是译文,不太理解!!!)

下面是一段实现的代码

private Bitmap sizeCompres(String path, int rqsW, int rqsH) {

// 用option设置返回的bitmap对象的一些属性参数

final BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;// 设置仅读取Bitmap的宽高而不读取内容

BitmapFactory.decodeFile(path, options);// 获取到图片的宽高,放在option里边

final int height = options.outHeight;//图片的高度放在option里的outHeight属性中

final int width = options.outWidth;

int inSampleSize = 1;

if (rqsW == 0 || rqsH == 0) {

options.inSampleSize = 1;

} else if (height  rqsH || width  rqsW) {

final int heightRatio = Math.round((float) height / (float) rqsH);

final int widthRatio = Math.round((float) width / (float) rqsW);

inSampleSize = heightRatio  widthRatio ? heightRatio : widthRatio;

options.inSampleSize = inSampleSize;

}

return BitmapFactory.decodeFile(path, options);// 主要通过option里的inSampleSize对原图片进行按比例压缩

}

private Bitmap sizeCompres(String path, int rqsW, int rqsH) {

// 用option设置返回的bitmap对象的一些属性参数

final BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;// 设置仅读取Bitmap的宽高而不读取内容

BitmapFactory.decodeFile(path, options);// 获取到图片的宽高,放在option里边

final int height = options.outHeight;//图片的高度放在option里的outHeight属性中

final int width = options.outWidth;

int inSampleSize = 1;

if (rqsW == 0 || rqsH == 0) {

options.inSampleSize = 1;

} else if (height rqsH || width rqsW) {

final int heightRatio = Math.round((float) height / (float) rqsH);

final int widthRatio = Math.round((float) width / (float) rqsW);

inSampleSize = heightRatio widthRatio ? heightRatio : widthRatio;

options.inSampleSize = inSampleSize;

}

return BitmapFactory.decodeFile(path, options);// 主要通过option里的inSampleSize对原图片进行按比例压缩

}

上面就是简单的质量压缩与尺寸压缩。

Android编程中怎么在屏幕上显示图片

ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/shu" /

说明几点:

1、项目中资源文件名称不要用中文,把“树”改成"shu"

2、启动一个模拟器或者先连接自己的手机,在DDMS查看,如果有设备说明连接成功了,这时就可以运行这个程序了。

怎样将Android图片同步进iCloud照片流

您可点击iPhone手机的设置>iCloud,然后登录Apple ID后,开启照片流,“照片”应用程序中显示“照片流”文件夹,拍摄一张照片会自动上传照片至iCloud服务器,“照片流”文件夹中也会显示此照片。

温馨提示:此功能只能用无线网络来上传、下载照片。

android怎么实现图片旋转

可以使用RotateAnimation动画实现,设定无限循环即可

代码如下

public class MyActivity extends Activity {

ImageView iv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_two);

iv = (ImageView)findViewById(R.id.image);

RotateAnimation animation = new RotateAnimation(0, 360);

animation.setDuration(100000);//设定转一圈的时间

animation.setRepeatCount(Animation.INFINITE);//设定无限循环

animation.setRepeatMode(Animation.RESTART);

iv.startAnimation(animation);

}

}

也可以自定义view继承于imageview,启动一个线程,在while循环里设置view的旋转角度

public class RotateView extends ImageView implements Runnable {

private float mCurDegree = 0;//当前旋转角度

public RotateView(Context context, AttributeSet attrs) {

super(context, attrs);

new Thread(this).start();

}

@Override

protected void onLayout(boolean changed, int left, int top, int right,

int bottom) {

super.onLayout(changed, left, top, right, bottom);

//设定旋转中心

setPivotX(getMeasuredWidth()/2);

setPivotY(getMeasuredHeight()/2);

}

@Override

public void run() {

while(true){

setRotation(mCurDegree);

mCurDegree += 5;

postInvalidate();

SystemClock.sleep(16);

}

}

}

在布局文件里使用RotateView代替imageview即可


分享名称:android图片,android图片浏览器
分享URL:http://cqcxhl.cn/article/dsshoed.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP