该问题主要是微信图片限制32K以内的原因,可将bmpToByteArray方法进行进行改写。
原方法是:
/**
* 得到Bitmap的byte
* @author netcorner
* @param bmp
* @return
*/
private byte[] bmpToByteArray(Bitmap bmp) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, output); byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
改进的方法
/**
* Bitmap转换成byte[]并且进行压缩,压缩到不大于maxkb
* @param bitmap
* @param maxkb
* @return
*/
public static byte[] bmpToByteArray(Bitmap bitmap, int maxkb) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
int options = 100;
while (output.toByteArray().length > maxkb&& options != 10) {
output.reset(); //清空output
bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中
options -= 10;
}
return output.toByteArray();
}