通过whatsapp发送图像时,您可以在图像视图中看到要发送的图像非常好地缩放
例如,我发送了两张图片给我的朋友
第一张图片的尺寸: 1296像素 X 2304像素
第二张图片的尺寸: 1920像素 X 1080像素
此图片太大,因此whatsapp必须先缩放它们才能在imageview中向我展示
按照whatapp缩放后的第一张图片的尺寸 333像素 X 339像素
按whatsapp缩放后第二张图片的尺寸 333像素 X 187像素
正如您所看到的,宽度相同,只有高度不同。我试图找出whatapp如何缩放这些图像,但是我的方法给了我一个与whatsapp的图像不同的图像
方法1
private void resizeImage(){
Uri selectedImage = imageReturnedIntent.getData();
d("image url is " + selectedImage);
InputStream imageStream = getContentResolver().openInputStream(selectedImage);
BitmapFactory.decodeStream(imageStream,null, options);
imageHeight = options.outHeight;
imageWidth = options.outWidth;
options.inSampleSize = calculateInSampleSize(options,reqWidth,reqHeight);
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(imageStream,null, options);
}
private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth , int reqHeght){
int height = options.outHeight;
int width = options . outWidth;
d("width is "+ width + " height is "+ height);
d("required width is "+ reqWidth + " required height "+ reqHeght);
int inSampleSize = 1;
if(height > reqHeght || width > reqWidth){
int heightRatio = Math.round((float)height/(float)reqHeght);
d("height ratio is "+ heightRatio);
int widthRatio = Math.round((float)width / (float) reqWidth);
d("width ratio is "+widthRatio);
inSampleSize = (heightRatio > widthRatio)? heightRatio :widthRatio;
}
d(" insample size is "+ inSampleSize);
return inSampleSize;
}
使用上述方法输出第一张图片:较小(<333)宽度,非常大的高度(> 339.它是579 !!)
第二种方法
private Bitmap scaleToFitWidth(Bitmap b, int width){
float factor = width/b.getWidth(); // width is 333
return Bitmap.createScaledBitmap(b, width,(int)(b.getHeight() * factor),true)
}
第二种方法输出第一张图像:图像高度非常大!
问题有谁知道如何像whatapp一样非常好地扩展图像在所有设备上?(如果可能的话,我希望与whatsapp相同)
编辑:whatsapp图片
我的huawel手机
三星平板电脑
答案 0 :(得分:7)
您可以查看此代码,它可以按照您的需要WhatsApp Like Image Compression运行。此代码已根据我的用法进行了修改。 使用此代码将为您提供:
原始文章:Loading images Super-Fast like WhatsApp
演示:
Original Image:尺寸 - 3.84Mb尺寸 - 3120 * 4160
Compressed Image:尺寸 - 157Kb尺寸 - 960 * 1280
修改1:您还可以制作扩展ImageView
类的自定义Square ImageView 。 SquareImageView
答案 1 :(得分:0)
如何对whatsapp中的图像进行二次采样/调整大小
您只需使用Glide,即可完成以下操作。更换 值 500,500 ,具有您所需的图像质量。
Glide.with(getApplicationContext())
.load(uri)
.asBitmap()
.into(new SimpleTarget<Bitmap>(500, 500) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
bitmap = resource;//this is the required bitmap
imageView.setImageBitmap(resource);
}
});
如果要将位图保存为文件,请使用以下方法
private File savebitmap(String filename) {
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
OutputStream outStream = null;
File file = new File(filename + ".png");
if (file.exists()) {
file.delete();
file = new File(extStorageDirectory, filename + ".png");
Log.e("file exist", "" + file + ",Bitmap= " + filename);
}
try {
// make a new bitmap from your file
Bitmap bitmap = BitmapFactory.decodeFile(file.getName());
outStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPG, 100, outStream);
outStream.flush();
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Log.e("file", "" + file);
return file;
}
要在项目中加入Glide,请将以下内容添加到您的gradle中 文件
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}