我的代码有效但不是我想要的方式。我想要的是获得更好的解决方案的一些改进。将图像从文件上载到远程服务器会使图像质量较差,尺寸较小。我尝试了不同的解决方案,包括Stack Overflow建议,但这些解决方案都没有帮助我。所以我想要的是将大图像上传到远程服务器,保持宽高比而不用OOM。
使用此代码:
public String resizeBase64Image(String base64image){
byte [] encodeByte=Base64.decode(base64image.getBytes(),Base64.DEFAULT);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inPurgeable = true;
Bitmap image = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length,options);
if(image.getHeight() <= 400 && image.getWidth() <= 400){
return base64image;
}
image = Bitmap.createScaledBitmap(image, 200, 200, false);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG,100, baos);
byte [] b=baos.toByteArray();
System.gc();
return Base64.encodeToString(b, Base64.NO_WRAP);
}
和;
private String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
return resizeBase64Image(Base64.encodeToString(imageBytes, Base64.DEFAULT));
}
这会导致图像质量不佳。当我尝试将此行image = Bitmap.createScaledBitmap(image, 200, 200, false);
更改为image = Bitmap.createScaledBitmap(image, 300, 300, false);
时,会发出错误。
任何拥有更好解决方案的人都可以帮助我在没有OOM的情况下更好地处理base64 String
方法,或者可以改进我的代码。