Java 降低uri图像质量以减小文件大小

Java 降低uri图像质量以减小文件大小,java,android,uri,Java,Android,Uri,我有一个高分辨率的图像Uri,我想降低图像质量和大小,因为我正在将其上载到服务器,然后将其作为原始图像的较小版本加载 我试过这个: Picasso.with(context).load(image).resize(100,100).get(); 但它不起作用,因为您需要从一个单独的线程执行此操作,而我没有找到一个侦听器来告诉您调整大小的过程何时结束 是否有人有一种解决方案可以降低图像质量以获得较小的文件大小?步骤1:在内容解析程序上调用openInputStream(),传入您的Uri 步骤2

我有一个高分辨率的
图像
Uri
,我想降低图像质量和大小,因为我正在将其上载到服务器,然后将其作为原始图像的较小版本加载

我试过这个:

Picasso.with(context).load(image).resize(100,100).get();
但它不起作用,因为您需要从一个单独的
线程执行此操作,而我没有找到一个侦听器来告诉您调整大小的过程何时结束

是否有人有一种解决方案可以降低图像质量以获得较小的文件大小?

步骤1:在
内容解析程序上调用
openInputStream()
,传入您的
Uri

步骤2:创建一个
BitmapFactory.Options
对象,使用
inSampleSize
控制要进行的下采样程度,创建一个较低分辨率的
位图

步骤3:将流和
BitmapFactory.Options
对象传递到
BitmapFactory
上的
decodeStream()
,以获得下采样的
位图

步骤4:上传
位图
,其中的详细信息会因您用于上传的任何API而有所不同(
字节[]
文件
,等等)

步骤5:在后台线程上执行步骤1-4,因为您不应该在主应用程序线程上执行磁盘I/O、位图下采样和网络操作

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 50;
Bitmap bmpSample = BitmapFactory.decodeFile(fileUri.getPath(), options);

ByteArrayOutputStream out = new ByteArrayOutputStream();                
bmpSample.compress(Bitmap.CompressFormat.JPEG, 1, out);
byte[] byteArray = out.toByteArray();
return convertToUri(byteArray);

谢谢

在convertToUri中如何将byteArray转换为Uri?