当用户从图库中选择图像时,我将其转换为base64字符串。然后,我使用API。图片大小必须小于2MB,因此,如果图库中的图片大于2MB,则需要减小其大小。 我该怎么办?
那是我的代码:
// I pass the URI of the image to the method
@Override
protected Integer doInBackground(Uri... uris) {
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(uris[0]);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
bytes = output.toByteArray();
String encodedImage = Base64.encodeToString(bytes, Base64.NO_WRAP);
答案 0 :(得分:0)
您可以使用创建一个位图对象
从指定的字节数组中解码不可变的位图。
然后您可以使用
将位图的压缩版本写入指定的 输出流。如果返回true,则可以通过以下方式重建位图: 将相应的输入流传递给BitmapFactory.decodeStream()。 注意:并非所有格式都直接支持所有位图配置,因此 从BitmapFactory返回的位图可能位于 位深度不同,和/或可能丢失了每个像素的Alpha(例如JPEG 仅支持不透明像素。
此方法可能需要花费几秒钟才能完成,因此只能 从工作线程调用。
和/或
在可能的情况下,根据现有位图创建新的位图。 如果指定的宽度和高度与当前宽度相同 和源位图的高度,则返回源位图,并且没有 创建新的位图。
在我的项目中,我创建了两个实用程序功能,这些功能可以帮助您了解如何使用上面提到的功能来满足您的需求
public static Bitmap base64ToBitmap(String encodedImage) {
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
}
public static String bitmapToBase64(Bitmap bitmap, int quality, int percentScale) {
if (quality < 0 || quality > 100) {
quality = IMAGE_QUALITY_DEFAULT_VALUE;
}
if (percentScale < 0 || percentScale > 100) {
percentScale = IMAGE_SCALE_DEFAULT_VALUE;
}
float scale = (float) percentScale / 100;
int width = Math.round(bitmap.getWidth() * scale);
int height = Math.round(bitmap.getHeight() * scale);
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(byteArray, Base64.NO_WRAP);
}
答案 1 :(得分:0)
一种轻松检查图像并将其存储的方法是根据开发人员文档 https://developer.android.com/topic/performance/graphics/load-bitmap#java 这可以正确解释您的答案,而另一种方法是更改可以在此处找到的图像的大小,然后相应地使用它 https://developer.android.com/reference/android/graphics/drawable/ScaleDrawable