在我的应用程序中,我将一些图像发送到服务器。 图像最大大小为300kb,我将调整文件大小。
这是我的调整大小代码。
public static void resize_filesize(Context context, Uri uri, int maxSize) {
int filesize;
int compressRate;
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
filesize = inputStream.available();
inputStream.close();
compressRate = ((100*maxSize) / filesize);
File storageDir = new File(Environment.getExternalStorageDirectory() + context.getString(R.string.photoPath));
File image = new File(storageDir,"resize.jpg");
FileOutputStream outputStream = new FileOutputStream(image);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
bitmap.compress(Bitmap.CompressFormat.JPEG, compressRate, outputStream);
outputStream.close();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context,
BuildConfig.APPLICATION_ID + ".provider", image);
} else {
uri = Uri.fromFile(image);
}
} catch (Exception e) {
e.printStackTrace();
}
}
我认为这个。
如果原始图像大小为500kb,我需要300kb。
比我设定的质量:60,图像将60%压缩,它变成300kb。
但我尝试了,这么多压缩工作。 这是我的日志。
original : 831210(811kb)
maxsize : 307200(300kb)
rate : 35
final size : 95053(92kb)
发生了什么???
ofcource我想要调整大小,但它太小了!
我做错了什么? '质量'不是指%?我怎么能接近' maxsize image?
在android文档中,只是说它意味着压缩大小...
答案 0 :(得分:7)
我认为这个。如果原始图像大小为500kb,我需要300kb。比我设定的质量:60,图像将60%压缩,它变成300kb。
没有
在android文档中,只是说它意味着压缩大小...
没有。对于quality
compress()
compress()
参数,The documentation有{}。{/}
提示压缩机,0-100。 0表示压缩小尺寸,100表示压缩以获得最高质量。某些格式,如无损的PNG,将忽略质量设置。
如果compress()
为PNG,则会忽略质量值。如果你"select * from " + tabelName
为JPEG,那么它用于控制JPEG compression,它通常使用0-100范围来表示所需的质量。但是,这并不意味着值为0会为您提供不占空间的照片。
我怎么能得到'接近'maxsize图像?
没有压缩它就无法知道JPEG压缩图像的大小。理想情况下,您不必担心它会“接近”一些特定的压缩比。相反,要么让用户选择质量值,要么只选择一些质量值并继续前进。