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

Android实现裁剪照片功能

34资源网2022-03-29464

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

分享给朋友:

相关文章

苹果X快充PD充电器推荐,现在下载还有优惠券可以领呢

苹果X快充PD充电器推荐,现在下载还有优惠券可以领呢

现在有很多人用的是苹果手机,因为平时有些人不注意使用方式或者使用充电器比较频繁导致损坏。大家都知道苹果手机和安卓手机的充电器是不一样的,不能用安卓手机的充电器充苹果手机。所以,大家如果苹果手机充电器损坏了,需要购买的话就要买个专门的苹果手机…

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡智能拖地机是东莞市宝联电子科技有限公司旗下产品,隶属于香港概念数码科技有限公司,其主要研发机器人吸尘器等高科技领域家居产品,想知道卡卡智能拖地机好用吗,看看下面是网友使用koko卡卡智能拖地机的相关介绍,希望对大家有所帮助。1、…

应用汇下载安装最新版(2021最新版应用汇app)

应用汇下载安装最新版(2021最新版应用汇app)

Donews8月17日消息(记者 邱慧)近日,为安卓手机服务的应用型软件“应用汇”新版正式上线,同时推出“应用收藏”功能——“应用集”。 应用集主要分为“推荐”、“最热”、“最新”三类。应用汇官方介绍,此次新版上线后,安装包被优化缩小,给…

语音导出软件哪个好用(免费的语音打包软件推荐)

语音导出软件哪个好用(免费的语音打包软件推荐)

有些QQ用户想把苹果手机或安卓手机QQ语音消息导出到电脑上,如保存为mp3格式文件,方便在电脑上的任意播放器中进行播放,或者想将某人发给自己的一些语音消息串联合并为一个MP3文件。以前手机QQ语音消息是保存在手机上的,但随着QQ版本的升级,…

第二家东南亚美股上市公司诞生,Grab为何上市即大跌?

第二家东南亚美股上市公司诞生,Grab为何上市即大跌?

编者按:本文来自微信公众号美股研究社(ID:meigushe),创业邦经授权转载 在很长一段时间内,来自新加坡、发家于东南亚市场的Sea(冬海集团)都被外界称为造富神话。并非因为其“东南亚小腾讯”的影子,而是其强大的游戏和电商业务支撑它制霸…