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;
    	}


  • 相关阅读:
    數據從一個DB寫入另外一個DB
    js 控制下拉菜單的刷新
    Ajax 加載數據庫中的圖片
    Win7 註冊表 刪除登陸帳號
    產生隨機數
    借助AjaxControlToolkit实现百度搜索时的下拉列表提示
    解决"Windows 安装程序不允许从远程桌面连接安装"
    中文转换成数字金额C#【转】
    让你的Visual Studio 2010自动添加头部注释信息【转】
    C# 图片识别(支持21种语言)【转】
  • 原文地址:https://www.cnblogs.com/llguanli/p/7112740.html
Copyright © 2011-2022 走看看