我的问题是,当我从图库中压缩图像大小(Mb到Kb)时,图像的高度和宽度也在压缩。谁能告诉我如何解决这个问题?我希望得到完整尺寸的图像(全高和全宽)。
这是图片上onclick
监听器的代码:
try {
IsProfilePic = 5;
usrimage5.setImageBitmap(Bitmap.createScaledBitmap(selectedBitmap, usrimage5.getWidth(), usrimage5.getHeight(), false));
usrimage5.setScaleType(ImageView.ScaleType.FIT_XY);
if (usrimage5.getTag() != new Integer(0))
DeleteImageID = usrimage5.getTag().toString();
} catch (OutOfMemoryError e) {
Log.e("Nithin 5", "" + e.toString());
}
这是我压缩图像的代码:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
selectedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
encoded = resizeBase64Image(Base64.encodeToString(byteArray, Base64.DEFAULT));
这是我在调整图片大小时调用的方法resizeBase64Image()
:
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, 400, 400, 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);
}
答案 0 :(得分:0)
selectedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
此行将导致以最高质量压缩图像,这可能不是您的目标。如果要将图像压缩为较小的尺寸(和JPEG格式),请将质量设置为较低的值(例如:使用90或80而不是100)
image.compress(Bitmap.CompressFormat.PNG, 100, baos);
这条线不会压缩你的图像,因为PNG是一种无损格式,并且会忽略整数值(这里你使用了100,无论如何都是最大值)。
image = Bitmap.createScaledBitmap(image, 400, 400, false);
这是将图像缩放到较低维度的线条。您可以在代码中忽略此方法,并且不会调整图像大小。
Follow this link以了解有关图像压缩和缩放的更多信息。