Android --- Bitmap quality compression stepped on the pit

04-11 14:44:30.845 19184 19255 E AndroidRuntime: java.lang.IllegalArgumentException: quality must be 0..100
04-11 14:44:30.845 19184 19255 E AndroidRuntime:        at android.graphics.Bitmap.compress(Bitmap.java:1436)
// 图片质量压缩踩过的坑
// 1.quality must be 0..100
// 2.输出流如果reset之后要重新压缩
public static Bitmap compressBitmap(Bitmap bitmap, long limit) {
    
    
	if (bitmap != null) {
    
    
	int quality = 100;
	ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
	bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteOutStream);

			// 循环判断压缩后图片是否超过限制大小
			while (byteOutStream.toByteArray().length / 1024  > limit) {
    
    
				// reset byteOutStream
				byteOutStream.reset();
				quality -= 10;
				if (quality <= 0) {
    
    
					// 由于reset byteOutStream了,所以要重新压缩,否则bitmap就为空
					quality += 10;
					bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteOutStream);
					break;
				}
				bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteOutStream);
			}
			Log.d(TAG, "quality is " + quality + " bitmap bytesize is " + bitmap.getByteCount());
			return BitmapFactory.decodeStream(new ByteArrayInputStream(byteOutStream.toByteArray()), null, null);
		}
		else {
    
    
			return null;
		}
}

Guess you like

Origin blog.csdn.net/qq_43290288/article/details/130084197