如何在上传到服务器之前使用Picasso调整图像大小?

时间:2014-10-30 05:43:56

标签: android image-uploading picasso loopj

我正在使用loopj上传图片。

params.put("file_"+key+"", new File(String.valueOf(value.getOriginalPath())));

但我想在上传之前调整图片大小。有没有办法“动态”调整图像大小 - 没有调整大小 - >保存到SD->上传?只调整内存和上传 - InputStream?

感谢。

2 个答案:

答案 0 :(得分:7)

您可以使用Bitmap s createScaledBitmap(),例如:这里

这个怎么样:How to Resize a Bitmap in Android?

编辑 - 将位图发送到服务器

内存中的位图非常大,因为它不像PNG或JPEG那样被压缩,而是每个像素需要3个甚至4个字节的内存。因此,您需要将该位图转换为例如上传前的PNG。这可以使用Bitmap.compress(...)方法完成,这需要OutputStream将压缩图像写入。由于您不希望在上传之前将图像保存到SD卡,因此您可以使用ByteArrayOutputStream将压缩图像保留在内存中。

然后,您可以将ByteArrayInputStream附加到写入的字节并将其传递给loopj。

在代码中,这应该是这样的:

ByteArrayOutputStream outStream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, quality, outStream);
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());

/* ...and then pass inStream loopj */

答案 1 :(得分:0)

Target mTarget = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {
        Log.d("!!!!!",">>>>>>>>>>>>");
        SaveImage.SaveImageFromBitmap(bitmap);
    }

    @Override
    public void onBitmapFailed(Drawable drawable) {
        Log.d("!!!!!","--------");
    }

    @Override
    public void onPrepareLoad(Drawable drawable) {

    }
};
File file = new File(value.getOriginalPathString());
Picasso.with(AddSpa.this).load(file).resize(800,0).into(mTarget);