当前位置:首页 > 谈天说地

Android实现裁剪照片功能

34资源网2022-03-29411

1.   从相册选择照片进行裁剪
从相册选择照片并裁剪:


/**
 * 从相册选择照片进行裁剪
 */
private void cropfromgallery() {
    // todo auto-generated method stub    
    intent intent=new intent();
    intent.setaction(intent.action_pick);//pick an item from the data
    intent.settype("image/*");//从所有图片中进行选择
    intent.putextra("crop", "true");//设置为裁切
    intent.putextra("aspectx", 1);//裁切的宽比例
    intent.putextra("aspecty", 1);//裁切的高比例
    intent.putextra("outputx", 600);//裁切的宽度
    intent.putextra("outputy", 600);//裁切的高度
    intent.putextra("scale", true);//支持缩放
    intent.putextra("return-data", false);
    intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
    intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
    intent.putextra("nofacedetection", true); // no face detection
    startactivityforresult(intent, select_pic);   
}


将裁减好的照片显示在显示在imagaview上:


case select_pic:
    if (resultcode==result_ok) {
        try {
            bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
                    openinputstream(imageuri));//将imageuri对象的图片加载到内存
            imgshow.setimagebitmap(bitmap);
        } catch (filenotfoundexception e) {
            // todo auto-generated catch block
            e.printstacktrace();
        }
    }
    break;

程序运行效果图:

2.   从相机拍取照片进行裁剪
控制相机拍照并将照片保存到指定位置:


/**
 * 从相机拍取照片进行裁剪
 */
private void cropfromtake() {
    // todo auto-generated method stub
    intent intent=new intent();
    intent.setaction(mediastore.action_image_capture);//设置action为拍照
    intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
    startactivityforresult(intent, take_pic);
}

裁剪已经排好的照片并显示在imageview上:


case take_pic:
    if (resultcode==result_ok) {
        cropimageuri(imageuri, 600, 600, crop_pic);
    }
    break;

/**
 * 裁剪指定uri对应的照片
 * @param imageuri:uri对应的照片
 * @param outputx:裁剪宽
 * @param outputy:裁剪高
 * @param requestcode:请求码
 */
private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
    intent intent = new intent("com.android.camera.action.crop");
    intent.setdataandtype(imageuri, "image/*");
    intent.putextra("crop", "true");
    intent.putextra("aspectx", 1);
    intent.putextra("aspecty", 1);
    intent.putextra("outputx", outputx);
    intent.putextra("outputy", outputy);
    intent.putextra("scale", true);
    intent.putextra(mediastore.extra_output, imageuri);
    intent.putextra("return-data", false);
    intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());
    intent.putextra("nofacedetection", true); // no face detection
    startactivityforresult(intent, requestcode);
}

程序运行效果图:

3.完整项目代码:
 

package com.jph.cp;
 
import java.io.file;
import java.io.filenotfoundexception;
import android.support.v7.app.actionbaractivity;
import android.content.intent;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.net.uri;
import android.os.bundle;
import android.os.environment;
import android.provider.mediastore;
import android.view.view;
import android.widget.imageview;
 
/**
 * 从相册选择照片进行裁剪,从相机拍取照片进行裁剪
 * @author jph
 * date:2014.10.09
 */
public class mainactivity extends actionbaractivity {
    private final static int select_pic=0x123; 
    private final static int take_pic=0x124; 
    private final static int crop_pic=0x125; 
    private uri imageuri;
    private imageview imgshow;
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        //初始化imageuri
        imageuri=uri.fromfile(new file(environment.getexternalstoragedirectory(), "test.jpg"));
        imgshow=(imageview)findviewbyid(r.id.imgshow);
    }
    @override
    protected void onactivityresult(int requestcode, int resultcode, intent data) {
        // todo auto-generated method stub
        switch (requestcode) {
        case select_pic:
            if (resultcode==result_ok) {
                try {
                    bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
                            openinputstream(imageuri));//将imageuri对象的图片加载到内存
                    imgshow.setimagebitmap(bitmap);
                } catch (filenotfoundexception e) {
                    // todo auto-generated catch block
                    e.printstacktrace();
                }
            }
            break;
        case take_pic:
            if (resultcode==result_ok) {
                cropimageuri(imageuri, 600, 600, crop_pic);
            }
            break;
        case crop_pic:
            if (resultcode==result_ok) {
                try {
                    bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
                            openinputstream(imageuri));//将imageuri对象的图片加载到内存
                    imgshow.setimagebitmap(bitmap);
                } catch (filenotfoundexception e) {
                    // todo auto-generated catch block
                    e.printstacktrace();
                }
            }
            break;
        default:
            break;
        }
        super.onactivityresult(requestcode, resultcode, data);
    }
    /**
     * 裁剪指定uri对应的照片
     * @param imageuri:uri对应的照片
     * @param outputx:裁剪宽
     * @param outputy:裁剪高
     * @param requestcode:请求码
     */
    private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
        intent intent = new intent("com.android.camera.action.crop");
        intent.setdataandtype(imageuri, "image/*");
        intent.putextra("crop", "true");
        intent.putextra("aspectx", 1);
        intent.putextra("aspecty", 1);
        intent.putextra("outputx", outputx);
        intent.putextra("outputy", outputy);
        intent.putextra("scale", true);
        intent.putextra(mediastore.extra_output, imageuri);
        intent.putextra("return-data", false);
        intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());
        intent.putextra("nofacedetection", true); // no face detection
        startactivityforresult(intent, requestcode);
    }
 
    public void croppic(view view) {
        switch (view.getid()) {
        case r.id.btncropfromgallery://从相册选择照片进行裁剪
            cropfromgallery();
            break;
        case r.id.btncropfromtake://从相机拍取照片进行裁剪
            cropfromtake();
            break;
 
        default:
            break;
        }
    }
    /**
     * 从相机拍取照片进行裁剪
     */
    private void cropfromtake() {
        // todo auto-generated method stub
        intent intent=new intent();
        intent.setaction(mediastore.action_image_capture);//设置action为拍照
        intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
        startactivityforresult(intent, take_pic);
    }
    /**
     * 从相册选择照片进行裁剪
     */
    private void cropfromgallery() {
        // todo auto-generated method stub        
        intent intent=new intent();
        intent.setaction(intent.action_pick);//pick an item from the data
        intent.settype("image/*");//从所有图片中进行选择
        intent.putextra("crop", "true");//设置为裁切
        intent.putextra("aspectx", 1);//裁切的宽比例
        intent.putextra("aspecty", 1);//裁切的高比例
        intent.putextra("outputx", 600);//裁切的宽度
        intent.putextra("outputy", 600);//裁切的高度
        intent.putextra("scale", true);//支持缩放
        intent.putextra("return-data", false);
        intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
        intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
        intent.putextra("nofacedetection", true); // no face detection
        startactivityforresult(intent, select_pic);    
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/11235.html

分享给朋友:

相关文章

现在小县城做什么创业比较好?

现在小县城做什么创业比较好?

目前在小县城做什么赚钱创业比较好呢?我相信大家都在想这个问题吧?其实小县城是一个不错的经济市场,主要看你做什么项目创业了。下面小编收集了几个项目,希望大家喜欢。…

养成良好的习惯,做一名有品位的教师

养成良好的习惯,做一名有品位的教师

陶行知先生说:“思想决定行动,行动养成习惯,习惯形成品质,品质决定命运”。最近从网上读了《影响教师一生的100个好习惯》一书,不禁对陶先生这句话有了更深刻的领悟和理解。阅读本书带给我的不仅是享受,更多的则是生活的引领,智慧的传递和方法的教授…

小型电冰箱什么牌子好?现在口碑最好的冰箱推荐

小型电冰箱什么牌子好?现在口碑最好的冰箱推荐

海尔冰箱全球公认的质量很不错的冰箱,海尔冰箱优点是:微霜,制冷效果不错;节能省电,保湿效果不错;海尔冰箱是十大品牌之首,全球销量的第一梯队的佼佼者。海尔冰箱外观十分好看,海尔冰箱款式几乎都很新颖,质量好,制冷情况好,用了一段时间,制冷情况稳…

dnf宇宙恶魔怎么打单人机制(单人宇宙恶魔罗什打法攻略)

在DNF游戏中,大家应该都认识宇宙恶魔罗什吧,这是一个非常强的BOSS,很多小伙伴都卡在这里,那么要怎么打呢,感兴趣的小伙伴就跟随小编一起来看看吧。 dnf单人宇宙恶魔罗什攻略 之所以打不过是因为玩家不清楚其机制。 进入BOSS战关卡后,罗…

苏宁易付宝在哪里找(苏宁易付宝解绑流程)

苏宁易付宝在哪里找(苏宁易付宝解绑流程)

天眼查App显示,近日,南京苏宁易付宝网络科技有限公司发生工商变更,尚姬娟退出法定代表人、执行董事、总经理一职,由卢世栋接任。 南京苏宁易付宝网络科技有限公司成立于2011年1月,注册资本为10亿人民币,经营范围包含互联网支付;计算机网络…

关于历史网站推荐(历史资料网站介绍)

关于历史网站推荐(历史资料网站介绍)

全历史是一个关于历史知识的网站(含同名APP),网站很有特色,主要有七大特点,文末有具体网站地址。 1、全历史时间轴 从宇宙大爆炸到地球形成,从生命起源到现代文明,只需一条时间轴让您轻松了解全历史发展。 2、时间地图 将时间、地图和历史全…