0

我正在使用 loopj 上传图片。

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

但我想在上传之前调整图像大小。有没有办法“即时”调整图像大小-无需调整大小->保存到SD->上传?只需调整内存大小并上传 - InputStream?

谢谢。

4

2 回答 2

7

您可以按照说明使用Bitmaps createScaledBitmap(),例如此处

这个怎么样:如何在 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 */
于 2014-11-15T16:47:37.563 回答
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);
于 2014-11-24T16:53:23.950 回答