[Android开发]-图片压缩(根据屏幕大小进行比例压缩)

[Android开发]-图片压缩(根据屏幕大小进行比例压缩)

在压缩图片后,将图片保存在外部缓存中。


 public class MainActivity extends AppCompatActivity {

        private Bitmap bitmap;
        private ImageView imageView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            imageView = (ImageView) findViewById(R.id.image_view);

            // 获取屏幕的宽高
            DisplayMetrics mDisplayMetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);
            int screenWidth = mDisplayMetrics.widthPixels;
            int screenHeight = mDisplayMetrics.heightPixels;

            // 只编码模式,获取图片的属性,如图片尺寸、类型,但不加载图片
            mOptions.inJustDecodeBounds = true;
            BitmapFactory.decodeResource(getResources(), R.mipmap.image, mOptions);

            // 得到图片的宽高
            int outWidth = mOptions.outWidth;
            int outHeight = mOptions.outHeight;
            Log.i("onCreate: ", "------outWidth: " + outWidth + "------outHeight: " + outHeight);

            // 宽高的缩放比例
            int widthScale = Math.round((float) outWidth / screenWidth);
            int heightScale = Math.round((float) outHeight / screenHeight);

            // 得到图片的压缩比例
            int sampleSize = 0;
            if (outWidth > outHeight) {
                sampleSize = widthScale;
                Log.i("onCreate: ", "------widthScale: " + widthScale);
            } else {
                sampleSize = heightScale;
                Log.i("onCreate: ", "------heightScale: " + heightScale);
            }

            if (sampleSize > 1) {
                mOptions.inSampleSize = sampleSize; // 设置图片的压缩比例
                mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
                mOptions.inJustDecodeBounds = false; // 退出只编码模式
                bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.image, mOptions);
            }

            // 显示压缩后的图片
            imageView.setImageBitmap(bitmap);

            // 将压缩后的图片保存
            try {
                FileOutputStream fos = new FileOutputStream(new File(getExternalCacheDir(), "img.jpg"));
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值