«

android 无法保存裁剪图片

时间:2024-3-2 19:59     作者:韩俊     分类: Android


一、问题描述

android取相册或者调用摄像头拍照的图片,经过裁剪保存的时候,报错“无法保存裁剪图片”。(在Nexus5机器上出现)


二、解决过程

由于Nexus5机器上也只是部分图片出现这样的情况。比对2种图片发现,一个小于1M一个大于1M。所以尝试把大图进行一下压缩,再去裁剪,问题解决。


三、具体代码

<pre name="code" class="java">//裁剪函数    
public void startPhotoZoom(Uri uri) {  
        //有些损毁的图片,会导致闪退
        if (uri.toString().equals("file:///")){
            Toast toast = Toast.makeText(this, "此文件不可用", Toast.LENGTH_SHORT);
            toast.show();
            return;
        }   
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //这里做了判断  如果图片大于 512KB 就进行压缩
        if(bitmap.getRowBytes()*bitmap.getHeight() > 512*1024){
            bitmap = compressImage(bitmap);
            uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null,null));
        }

        Intent intent = new Intent("com.android.camera.action.CROP");  
        intent.setDataAndType(uri, IMAGE_UNSPECIFIED);  
        intent.putExtra("crop", "true");  
        intent.putExtra("aspectX",bitmap.getWidth() );  //
        intent.putExtra("aspectY",bitmap.getHeight());  //
        intent.putExtra("outputX", 175);  
        intent.putExtra("outputY", 175);
        intent.putExtra("outputFormat", "PNG");// 图片格式
        intent.putExtra("return-data", true);  
        startActivityForResult(intent, PHOTORESOULT);  

    }
//图片压缩
private Bitmap compressImage(Bitmap image) {  

        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  
        int options = 100;  
        while ( baos.toByteArray().length / 1024>200) {  //循环判断如果压缩后图片是否大于200kb,大于继续压缩         
            baos.reset();//重置baos即清空baos  
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中  
            options -= 10;//每次都减少10  
        }  
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  
        return bitmap;  
    }  







        <p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>

标签: android

热门推荐