xutils按照图片的比例压缩接口
来源:互联网 发布:安徽航天信息开票软件 编辑:程序博客网 时间:2024/05/16 07:08
package com.example.myapplication;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import org.xutils.common.Callback;import org.xutils.common.util.DensityUtil;import org.xutils.image.ImageOptions;import org.xutils.x;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;public class MainActivity extends AppCompatActivity { private ImageView image; private ImageOptions imageOptions2; private ImageView image2; private Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); x.Ext.init(getApplication()); image = (ImageView) findViewById(R.id.image); image2 = (ImageView) findViewById(R.id.image2); if(imageOptions2==null){ imageOptions2 = new ImageOptions.Builder()// .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))// .setRadius(DensityUtil.dip2px(5)) // 如果ImageView的大小不是定义为wrap_content, 不要crop.设置成fasle就好了// .setCrop(false) // 很多时候设置了合适的scaleType也不需要它. // 加载中或错误图片的ScaleType //.setPlaceholderScaleType(ImageView.ScaleType.MATRIX)// .setImageScaleType(ImageView.ScaleType.FIT_XY) .setLoadingDrawableId(R.mipmap.ic_launcher)//加载中的图片 .setFailureDrawableId(R.mipmap.ic_launcher)//默认的图片 .build(); } x.image().loadDrawable( "http://img01.tooopen.com/Downs/images/2010/4/10/sy_20100410100959952919.jpg", imageOptions2, new Callback.CommonCallback<Drawable>() { @Override public void onSuccess(Drawable result) { BitmapDrawable bd = (BitmapDrawable) result; bitmap = bd.getBitmap(); Bitmap comp = comp(bitmap); image.setImageBitmap(comp); } @Override public void onError(Throwable ex, boolean isOnCallback) { image.setImageResource(R.mipmap.ic_launcher); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); x.image().loadDrawable( "http://wenwen.soso.com/p/20120208/20120208225353-1466244753.jpg", imageOptions2, new Callback.CommonCallback<Drawable>() { @Override public void onSuccess(Drawable result) { BitmapDrawable bd = (BitmapDrawable) result; bitmap = bd.getBitmap(); Bitmap comp = comp(bitmap); image2.setImageBitmap(comp); } @Override public void onError(Throwable ex, boolean isOnCallback) { image.setImageResource(R.mipmap.ic_launcher); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } private 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 image.compress(Bitmap.CompressFormat.JPEG, 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;//设置缩放比例 newOpts.inPreferredConfig = Bitmap.Config.RGB_565;//降低图片从ARGB888到RGB565 //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 isBm = new ByteArrayInputStream(baos.toByteArray()); bitmap = BitmapFactory.decodeStream(isBm, null, newOpts); return compressImage(bitmap);//压缩好比例大小后再进行质量压缩 } private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩 baos.reset();//重置baos即清空baos options -= 10;//每次都减少10 image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中 } ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片 return bitmap; }}
阅读全文
0 0
- xutils按照图片的比例压缩接口
- 将图片按照比例显示
- 自定义按照图片宽高比例缩放的RadioLayout
- Picasso处理图片,按照设置的宽度比例来缩放
- 等比例压缩图片
- 图片等比例压缩
- 图片等比例压缩
- iOS 图片比例压缩
- .net中按照比例生成图片
- js图片等比例压缩
- 图片等比例压缩方法
- iOS等比例压缩图片
- php图片等比例压缩
- 上传 图片 等比例压缩
- java等比例压缩图片
- php等比例压缩图片
- 上传等比例压缩图片
- python图片等比例压缩
- python---practice2
- html 横排展示,不换行
- samba目录只对指定有权限的用户可见
- Oryx Serving 层解析
- [LeetCode] 160. Intersection of Two Linked Lists
- xutils按照图片的比例压缩接口
- 文件格式
- DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
- jquery ajax成功响应后无法赋值给全局变量
- CodeVs1025 [选菜]
- 版本管理工具Git相关知识及其注意事项
- android登录记住多个密码
- 第一篇博客
- 回车事件的捕捉