当前位置:首页 > 谈天说地 > 正文内容

Android实现裁剪照片功能

34资源网2022年03月29日 11:51284

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);    
    }
}

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

看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等

支付宝红包二维码

除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。

看下图所示是好多参与这次活动领取红包的朋友:

支付宝红包

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

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

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

分享给朋友:

相关文章

怎么用兴趣造句?15句关于兴趣的造句示例
怎么用兴趣造句?15句关于兴趣的造句示例

很多人不知道怎么用兴趣造句?下面小编整理了15句关于兴趣的造句示例希望对大家有所帮助。关于兴趣的造句:1、作为一个导演,离开自己兴趣的东西他都可以剪掉。我今天可以告诉你,没有一个字,不是我的兴趣。2、在劳动中获得的喜悦是特别的,绝对不是游玩...

打工人是什么梗出自哪里?打工人的梗为什么这么火?
打工人是什么梗出自哪里?打工人的梗为什么这么火?

近日,看到打工人这词很火,很多小伙伴肯定和我一样,都想知道“打工人”这个词为什么这么火吧?那么,接下来我就跟大家说说打工人是什么梗出自哪里?这词出自哪里无从考证,不过肯定是某些有头脑的网友发明的,至于出自哪位网友?我们一起来了解相关情况吧。...

华梅的经典语录
华梅的经典语录

华梅,女,1951年生于天津市,祖籍无锡。现为天津师范大学美术与设计学院院长、教授、师大华梅服饰文化学研究所所长。国家人事部授衔“有突出贡献中青年专家”,享受国务院政府津贴。1997年天津市劳动模范,1998年全国教育系统巾帼建功标兵、全国...

泰戈尔的名言名句:世界上最远的距离
泰戈尔的名言名句:世界上最远的距离

世界上最远的距离不是生与死的距离而是我站在你的面前你却不知道我爱你世界上最远的距离不是我站在你的面前你却不知道我爱你而是爱到痴迷却不能说我爱你世界上最远的距离不是我不能说我爱你而是想你痛彻心脾却只能深埋心底世界上最远的距离不是我不能说我想你...

100句非常经典的人生励志语录分享
100句非常经典的人生励志语录分享

1、不要皱眉,即使在伤心的时刻,因为你从不知道有谁会醉心于你的笑容。2、失去只是一种姿势,得到并不等同于幸福。3、真理和美女都是赤裸裸的。4、我们看错了这个世界,却说世界欺骗了我们。5、我们人这一辈子不是别人的楷模,就是别人的借鉴。6、千万...

逍遥手机模拟器怎么用(逍遥安卓模拟器详细使用教程)
逍遥手机模拟器怎么用(逍遥安卓模拟器详细使用教程)

真正的5V5公平竞技对战,传承端游纯正体验。人气英雄,经典还原;公平竞技,实力至上;峡谷传说,掌心再现。策略、战术、意识、配合,在移动端重现峡谷战场乐趣。 为了庆祝大家期待已久的中国区开服,官方也带来了五大福利活动,用户可免费参与,并获...