android 缩放和压缩图片可以如下解释:
压缩图片
这里简单的将一个图片文件转换为 Bitmap ,并且在转换的过程中对图片质量进行简单压缩:
bitmap.compress(Bitmap.CompressFormat.JPEG, int quality, FileOutputStream fos);
注意这里的 quality 的范围为 0~100 ,经过测试如果这个值设置比较低的话图片会非常不清晰, 基本不可用, 0~100 的值可以参考类似Photoshop之类输出图片时选择的图片质量.
此方法只是单纯对图片质量进行处理, 并不会改变其大小, 如果需要改变图片文件的大小, 最好是使用缩放, 这个可以在保证一定的图片清晰度的情况下减少了图片大小, 毕竟手机屏幕就那么点, 你把 2000px * 1000px 的图片改为 500px * 250px 在手机用户看来也不会有太严重的不适感, 而如果你只设置图片的 quality 想来改变文件大小, 你最后会发现得到的是一个 2000px * 1000px 的几个色块.
缩放图片
先提代码看看:
[java] view plain
/**
* 保持长宽比缩小Bitmap
*
* @param bitmap
* @param maxWidth
* @param maxHeight
* @return
*/
public Bitmap resizeBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {
int originWidth = bitmap.getWidth();
int originHeight = bitmap.getHeight();
// no need to resize
if (originWidth < maxWidth && originHeight < maxHeight) {
return bitmap;
}
int width = originWidth;
int height = originHeight;
// 若图片过宽, 则保持长宽比缩放图片
if (originWidth > maxWidth) {
width = maxWidth;
double i = originWidth * 1.0 / maxWidth;
height = (int) Math.floor(originHeight / i);
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
}
// 若图片过长, 则从上端截取
if (height > maxHeight) {
height = maxHeight;
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
}
// Log.i(TAG, width + " width");
// Log.i(TAG, height + " height");
return bitmap;
}
这里演示是将图片缩小到一个max范围内, 而不是直接将变成硬性的变成某个尺寸的图片, 因为一般来说这种设置max的方式符合大部分需要, 如果必须将图片变成某个指定尺寸可以直接使用 Bitmap.createScaledBitmap 方法, 也是下面要介绍的.
此函数主要就是使用了 Bitmap 的两个静态方法, 一个是:
public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
此方法就会把一个 Bitmap 图片 缩放 成指定的尺寸.
⑵ Android中压缩图片指定大小
注意看这句话,bit.compress(CompressFormat.PNG, 100, baos);
那里的数字表示 如果不压缩是100,表示压缩率为0。
如果是70,就表示压缩率是70,表示压缩30%;
所以你的倒数第二句话表示没有压缩。
以下是我压缩的方法,望采纳。
/**
* 图像压缩并保存到本地
* 返回处理过的图片
*
*/
private Bitmap
saveImage(String fileName,Bitmap bit) {
File file = new
File(fileName);
if (!file.exists()) {
try
{
file.createNewFile();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, 70,
stream);
// 70 是压缩率,表示压缩30%; 如果不压缩是100,表示压缩率为0
FileOutputStream os =
new
FileOutputStream(file);
os.write(stream.toByteArray());
os.close();
return
bit;
} catch (Exception e) {
file = null;
return
null;
}
}