我有一个高分辨率image
Uri
我希望降低图像质量和尺寸,因为我将其上传到服务器,然后将其作为较小版本的原始版本加载图像。
我试过了:
Picasso.with(context).load(image).resize(100,100).get();
但它没有用,因为你需要从一个单独的Thread
执行此操作,而我没有找到一个监听器来告诉你调整大小何时结束。
是否有人能够降低图像质量以获得更小的文件大小?
答案 0 :(得分:1)
第1步:在[{1}}上致电openInputStream()
,传递ContentResolver
。
步骤2:创建一个Uri
对象,使用BitmapFactory.Options
来控制您想要执行的下采样的程度,以创建分辨率较低的inSampleSize
。
步骤3:将流和Bitmap
对象传递到BitmapFactory.Options
上的decodeStream()
,以获得缩减采样BitmapFactory
。
步骤#4:上传Bitmap
,其中详细信息会因您用于上传的任何API而有所不同(Bitmap
,byte[]
等。)< / p>
步骤#5:在后台线程上执行步骤#1-4,因为您不应该在主应用程序线程上执行磁盘I / O,位图下采样和网络操作。
答案 1 :(得分:1)
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);