zoukankan      html  css  js  c++  java
  • Android学习之图片压缩,压缩程度高且失真度小

            曾经在做手机上传图片的时候。直接获取相机拍摄的原图上传,原图大小一般1~2M。因此上传一张都比較浪费资源,有些场景还须要图片多张上传,所以近期查看了好多前辈写的关于图片处理的资料。然后试着改了一个图片压缩的方法。经測试用着还不错。压缩效果非常理想,主要是失真不明显。在这里分享一下。

            以下直接上代码:

    	/**
    	 * 上传server时把图片调用以下方法压缩后 保存到暂时目录 图片压缩后小于200KB。失真度不明显
    	 * 
    	 * @param path
    	 * @return
    	 * @throws IOException
    	 */
    	public static Bitmap revitionImageSize(String path) throws IOException {
    		BufferedInputStream in = new BufferedInputStream(new FileInputStream(
    				new File(path)));
    		BitmapFactory.Options options = new BitmapFactory.Options();
    		options.inJustDecodeBounds = true;
    		BitmapFactory.decodeStream(in, null, options);
    		in.close();
    		int i = 0;
    		Bitmap bitmap = null;
    		// options.inJustDecodeBounds=true那么将不返回实际的bitmap对象,不给其分配内存空间可是能够得到一些解码边界信息即图片大小等信息
    		// outHeight(图片原始高度)和 outWidth(图片的原始宽度)
    		// inSampleSize表示缩略图大小为原始图片大小的几分之中的一个
    		// options.outWidth >> i(右移运算符)表示:outWidth/(2^i)
    		while (true) {
    			if ((options.outWidth >> i <= 2000)
    					&& (options.outHeight >> i <= 2000)) {
    				in = new BufferedInputStream(
    						new FileInputStream(new File(path)));
    				options.inSampleSize = (int) Math.pow(2.0D, i); // 幂运算 i为几次方
    				options.inJustDecodeBounds = false;
    				bitmap = BitmapFactory.decodeStream(in, null, options);
    				break;
    			}
    			i += 1;
    		}
    		return bitmap;
    	}


  • 相关阅读:
    简单的react-dom.js react.js 中的源码手写
    回顾vue源码理解到哪记录到哪
    一道很有纪念意义的算法题之多维数组去重,不降维
    下载文件.xlsx .csv 或者下载压缩包
    koa+mysql简单实现查询功能
    幽灵空白节点解决方案,史上最明白
    useCallback,useMemo源码
    useContext源码解读
    useEffect源码
    Hadoop 学习笔记(二)Hadoop 本地运行环境搭建及简单应用
  • 原文地址:https://www.cnblogs.com/llguanli/p/7112740.html
Copyright © 2011-2022 走看看