• Android --------- 压缩图片的尺寸和大小


    压缩图片大小,尺寸不变

    • 将已知路径的图片压缩至不大于目标大小,并保存至指定路径

        /**
         * 质量压缩,通过给定的路径来压缩图片并保存到指定路径
         * 
         * @param srcPath
         *            资源图片的路径
         * @param savePath
         *            图片的保存路径
         * @param aimSize
         *            压缩到图片大小的最大值
         */
        public static void compressImageByPath(String srcPath, String savePath,
        		int aimSize) {
        	// 注意savePath的文件夹和文件的判断
        	Bitmap imgBitmap = BitmapFactory.decodeFile(srcPath);
        	ByteArrayOutputStream baos = new ByteArrayOutputStream();
        	int percent = 100;// 定义压缩比例,初始为不压缩
        	imgBitmap.compress(Bitmap.CompressFormat.JPEG, percent, baos);
        	int currentSize = baos.toByteArray().length / 1024;
        	while (currentSize > aimSize) {// 循环判断压缩后图片是否大于目的大小,若大于则继续压缩
        		baos.reset();// 重置baos,即清空baos
        		//注意:此处该方法的第一个参数必须为JPEG,若为PNG则无法压缩。
        		imgBitmap.compress(Bitmap.CompressFormat.JPEG, percent, baos);
        		currentSize = baos.toByteArray().length / 1024;
        		percent -= 5;
        		if (percent <= 0) {
        			break;
        		}
        	}
      
        	try {//将数据写入输出流
        		FileOutputStream fos = new FileOutputStream(savePath);
        		baos.writeTo(fos);
        	} catch (Exception e) {
        		e.printStackTrace();
        	} finally {
        		try {//清空缓存,关闭流
        			baos.flush();
        			baos.close();
        		} catch (Exception e) {
        			e.printStackTrace();
        		}
        	}
        	if (!imgBitmap.isRecycled()) {
        		imgBitmap.recycle();//回收图片所占的内存
        		System.gc();//提醒系统及时回收
        	}
        }
    绳锯木断,水滴石穿。海纳百川,积少成多。一分耕耘,一份收获。
  • 相关阅读:
    day 01
    day14
    day12
    day13
    day11
    day9
    day10
    day08
    day07
    day06
  • 原文地址:https://www.cnblogs.com/tittles0k/p/5788254.html
Copyright © 2020-2023  润新知