通过whatsapp发送图像时,您可以看到您在图像视图中发送的图像非常好
例如,我发送了两张图片给我的朋友
第一张图片的大小:1296像素 X 2304像素
第二图像的大小:1920像素 × 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手机
三星平板电脑
您可以签出此代码,它的工作方式与您想要的WhatsApp图像压缩相同.此代码已根据我的用法进行了修改.使用此代码将为您提供:
低尺寸图像约100kb,无需播放图像质量.
高像素图像将缩小到maxWidth和maxHeight,而不会失去其原始质量.
原始文章:像WhatsApp一样加载超快速图像
演示:
原始图像:尺寸 - 3.84Mb尺寸 - 3120*4160
压缩图像:尺寸 - 157Kb尺寸 - 960*1280
编辑1:您还可以制作扩展Class 的自定义Square ImageViewImageView
.SquareImageView