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

Android实现裁剪照片功能

34资源网2022-03-29443

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

分享给朋友:

相关文章

剁椒鱼头的做法分享

剁椒鱼头的做法分享

剁椒鱼头是一道很美味的菜,过年,过节,吃剁椒鱼头的人特别多。那么,这道菜是怎么做的呢?下面,小编就告诉大家剁椒鱼头的做法,教你怎么做好吃点。…

低成本创业好项目,这个可日赚几千元

低成本创业好项目,这个可日赚几千元

这几年创业项目也变得越来越多了,大家都知道,现在靠打工是挣不了什么钱的,所以,很多人宁愿自己创业不想打工。那么,低成本创业项目有哪些呢?下面小编马上为大家推荐一个低成本创业项目,如果你有资源的话,也可以免费去推广操作,做好了日赚几千也是很容…

视频号入口在哪里(视频号直播入口新手手册)

视频号入口在哪里(视频号直播入口新手手册)

视频号助手在哪里?视频号助手什么时候上线?微信视频号助手正式上线目前微信视频号助手已经开始内测使用了,大家可以直接在PC端扫码登录,管理自己的视频号,可以看到自己的各项动态数据,非常方便管理。 视频号助手在哪里 视频号助手在哪里? 手机微…

抖音上热门技巧有哪些(dou+投粉丝量还是点赞量)

抖音上热门技巧有哪些(dou+投粉丝量还是点赞量)

前不久,“越来和锅锅”发布了自己的第一条抖音视频,结果该视频一天的播放量达到了2581万,至今获赞205.7万。可见,选择适合自己的视频表现方式比努力更重要。 (图片来源:抖音APP) 抖音如何上热门,一直是小伙伴们想要了解的答案。 如果…

itunes备份路径在哪里(教你查看itunes备份路径)

itunes备份路径在哪里(教你查看itunes备份路径)

用itunes备份的都知道,备份到C盘的,日积月累,C盘越来越小了,上网教程参差不齐,本教程本人亲测,因为我看到我的64G SSD空间越来越小,伤不起!!!操作步骤1、下载Junction,将Junction.exe拷贝到C:Windows…