Android关于图片压缩
关于图片压缩
【Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传】
http://blog.csdn.net/jdsjlzx/article/details/44228935
- 图片按比例大小压缩方法
public static Bitmap compressScale(Bitmap image, int value) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//判断如果图片大于xxM,进行压缩避免在生成图片 (BitmapFactory.decodeStream)时溢出if (baos.toByteArray().length / 1024 > 100){baos.reset();// 重置baos即清空baos// 这里压缩50%,把压缩后的数据存放到baos中image.compress(Bitmap.CompressFormat.JPEG, 80, 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;Log.i("123", w + "---------------" + h);// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为// float hh = 800f;// 这里设置高度为800f// float ww = 480f;// 这里设置宽度为480ffloat hh = 512f;float ww = 512f;// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可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 = Config.RGB_565;//降低图片从ARGB888到RGB565// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了isBm = new ByteArrayInputStream(baos.toByteArray());bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);return compressImage(bitmap,value);// 压缩好比例大小后再进行质量压缩}
2、质量压缩方法
ByteArrayOutputStream baos = new ByteArrayOutputStream();// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中image.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 90;Log.e("123", "compressImage: " + baos.toByteArray().length / 1024);// 循环判断如果压缩后图片是否大于xxkb,大于继续压缩while (baos.toByteArray().length / 1024 > value) { Log.e("123", "compressImage: zzz");baos.reset(); // 重置baos即清空baos//这里压缩options%,把压缩后的数据存放到baos中image.compress(Bitmap.CompressFormat.JPEG, options, baos); options -= 10;// 每次都减少10Log.e("123", "compressImage: " + baos.toByteArray().length / 1024);}//把压缩后的数据baos存放到ByteArrayInputStream中ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray()); //把ByteArrayInputStream数据生成图片Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
//保存压缩后的图片File dir = new File(path);if (!dir.exists()) {//文件不存在,则创建文件dir.mkdirs();}File file = new File(path, "pm.png");FileOutputStream fOut = null;try {FileOutputStream out = new FileOutputStream(file);out.write(baos.toByteArray());out.flush();out.close();} catch (IOException e) {e.printStackTrace();}return bitmap;
Android关于图片压缩相关推荐
- Android LibJpeg图片压缩
Android的图片压缩 Android的图片压缩的几种方式:质量压缩,尺寸压缩,采样率压缩,通过NDK调用libjpeg库进行压缩! 质量压缩 通过设置bitmap options属性,降低图片的质 ...
- Android的图片压缩并上传
Android开发中上传图片很常见,一般为了节省流量会进行压缩的操作,本篇记录一下压缩和上传的方法. 图片压缩的方法 : import java.io.ByteArrayOutputStream; i ...
- Android之图片压缩
转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52485037 1. 引子 前几天跟服务端的一个妹子联调接口,服务器配置一张图片,几十K ...
- Android中图片压缩分析(上)
此文章首发:https://mp.weixin.qq.com/s/QZ-XTsO7WnNvpnbr3DWQmg 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种: ...
- Android中图片压缩方案详解
如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避 ...
- Android BitMap图片压缩
最近在网上看了一些关于图片压缩的博客,自己也动手实验了一遍,也算事对图片压缩有了一个了解,打算写个博客记录一下.文末附上参考链接. Android中涉及到图片的话一般都会用到BitMap类和Bitma ...
- Android图片系列-2.Android App图片压缩、裁剪分析整理
移动端常用的图片格式有PNG和JPEG,目前ios手机和大部分安卓手机拍照生成的图片默认格式都是JPEG.我们开发APP的时候通常使用的是PNG,这可能是考虑到图片质量效果.PNG图片是无损压缩格式, ...
- Android实现图片压缩并上传到服务器
最近公司又叫开发了一个新项目,这个项目中上传图片用的蛮多的,于是整理一下,记录自己的心得体验 刚入手的时候,对于图片的大小还没有概念,(以前上传图片都是用户头像,对大小没什么要求),心想之间上传就是了 ...
- Android 高效图片压缩
使用libjpeg-turbo进行图片压缩 1. JEPG 是什么? 相信有一部分使用 iPhone 手机用微信发送图片的时候,明明图片大小只有 1M ,但清晰度比 Android 手机 5 M 图片 ...
最新文章
- flash socket 发对象问题
- (笔记)java环境变量设置
- 联发科mtk和骁龙730哪个好_不惧高通挑战!联发科G90芯片发布,强势干翻骁龙730...
- Taro+react开发(88):大写px 控制样式
- 帝国CMS模板|中国历史网整站数据MIP源码下载、带Tags提取插件
- 实战突击:PHP项目开发案例整合(第2版)
- 神经网络一(Neural Network)
- NYOJ--114--某种序列(大数)
- XPS文件怎么转成Word呢
- 服务器 交换机 无线ap,交换机、路由器、防火墙、无线AP等和终端设备
- 判断DataTable中否存在指定列
- linux7设置广播,中标麒麟Linux7 如何关闭广播消息
- android渠道占有率,硬核联盟分发量在安卓渠道占比高达64%,2019年将发力四大方向...
- 如何用课件制作工具验证三角形内角和
- 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。
- android开发者mac(含M1芯片)电脑全新配置2022
- 从平凡到不平凡(转)
- 短信验证码总是发送失败是什么原因?
- 平安科技面试(成都应届)
- 整体理解抽象、封装、继承、多态
热门文章
- hacker入门专业术语
- Java Mail---SMTP协议-Java发邮件(带附件)演示过程
- python文件管理器_Tkinter 之文件管理器
- Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯...
- 关于瞎报Access violation writing location异常的瞎解决方法
- 图片放上效果ImageHover.css
- react(let命令)
- 201871010123-吴丽丽《面向对象程序设计(Java)》第四周学习总结
- ERROR tool.ExportTool: Error during export: Export job failed!错误解析
- Ubuntu16.04安装GTX960闭源驱动(Dell XPS 9550)