首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传前处理位图大小

上传前处理位图大小
EN

Stack Overflow用户
提问于 2016-04-06 15:30:07
回答 1查看 81关注 0票数 0

我让我的用户从他们的安卓画廊上传图片到后端存储。

问题是,如果他们选择一个巨大的图像,这肯定会产生OutOfMemory错误。我想要做的所有关于位图,是确保它不会产生任何OOM错误。所以,只要检查它是否太大,如果是,缩小它的大小,但保持高宽比,我不想剪掉部分照片。当我从后端下载该图像时,它将遍历picasso,并将其与.centerCrop()和.fit()一起裁剪到图像视图中。

首先,下面是从图库接收数据的活动:

代码语言:javascript
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode,resultCode,data);
    if(resultCode == RESULT_OK){
        if(requestCode == SELECT_PICTURE){

            Uri selectedImage = data.getData();

            if(!image1_exists){
                attachImage(image1,selectedImage);
            }

        }

    }
}

接下来,我将选择的图像显示在“图片库”布局中:

代码语言:javascript
复制
public void attachImage(ImageView image, Uri uri){

    Picasso.with(this).load(uri).resize(500,500).into(mTarget);

    Picasso.with(this).load(uri).centerCrop().fit().into(image);

}

因此,一个Picasso实例正在显示他们选择的图像,而另一个实例应该调整uri数据的大小,以防它太大(这是我需要完全更改的部分),将其转换为Target:

代码语言:javascript
复制
final Target mTarget = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {

        image_scaled = Bitmap.createScaledBitmap(bitmap, 500,500 * bitmap.getHeight() / bitmap.getWidth(), false);
        if(!image1_exists){
            uploadImage(image_scaled,"image1");
        }

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

    @Override
    public void onPrepareLoad(Drawable drawable) {
        Log.d("DEBUG", "onPrepareLoad");
    }
};

在这里,我还想(如您所见)缩放位图,以缩小大小,并在后端节省存储空间。但要保持高宽比,而不剪裁掉图像的任何部分。这可能是不必要的,我可以想象,因为我将不得不做一些类似的大型图像?如果你需要知道这些图像的布局,想象一下Instagram上的个人资料,其中所有的图像都符合一个方形的图像视图。

希望有人能理解这件事,理解我想要实现的目标。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-06 15:51:40

我使用位图解码选项完成了这一操作。使用此方法解码位图,将降低采样,从而减少设备上占用的内存。不幸的是,您只能在解码位图时应用它,因此这意味着它不能与Picasso目标一起工作,但是我相信没有它您可以处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36455675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档