拍照和选择相册照片

1. 相册选择图片

private void setalbumImg(int type2) {
        // TODO Auto-generated method stub
        pw.dismiss();
        // 从相册获取图片
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(IMAGE_TYPE);
        startActivityForResult(intent, type2);
        // 把资源图片转换成bitmap
        // bm= BitmapFactory.decodeResource(MainActivity.this.getResources(),
        // R.drawable.ic_launcher);
        // img.setImageBitmap(bm);
    }
 

2.拍照

private void setcameraImg(int type2) {
        // TODO Auto-generated method stub
        pw.dismiss();
        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, type2+1);
    }

3   onActivityResult:  其中img_shipper表示的是ImgView要显示的那个照片

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            // 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口
            ContentResolver resolver = getContentResolver();
            // 此处的用于判断接收的Activity是不是你想要的那个
            if (requestCode == type) {
                try {
                    Uri originalUri = data.getData(); // 获得图片的uri
                    bm = MediaStore.Images.Media.getBitmap(resolver,
                            originalUri);
                    // 图片等比例缩放
                    Bitmap bitmap = CommonUtils.scaleImg(bm,
                            CommonUtils.getViewWIth(img_shipper)[0],
                            CommonUtils.getViewWIth(img_shipper)[1]);
                    // scaleImg();
                    // 显得到bitmap图片
                    // cutImg(originalUri);
                    iconpath = "touxiang.png";

//                    saveImg();
                    img_shipper.setImageBitmap(bitmap);
                } catch (IOException e) {
                    Log.e("TAG-->Error", e.toString());
                }
            }
            if (requestCode ==type+1) {
                Bundle bundle = data.getExtras();
                bm = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
                // 图片等比例缩放
            Bitmap    bitmap=    CommonUtils.scaleImg(bm, CommonUtils.getViewWIth(img_shipper)[0],  CommonUtils.getViewWIth(img_shipper)[1]);
                // scaleImg();

                // 图片剪切
                iconpath = "touxiang.png";

//                Uri uri = Uri.fromFile(fi);
//                cutImg(uri);
                // 显得到bitmap图片
                img_shipper.setImageBitmap(bitmap);
            }
            if (requestCode == 200) {
                // 拿到剪切数据
                bm = data.getParcelableExtra("data");

                // 显示剪切的图像
                // img.setImageBitmap(bm);

            }
        }
    }

4.

/**
     * 得到view宽高
     *
     * @return 0,宽;1,高
     */
    public static int[] getViewWIth(final View view) {
        int[] dpi = new int[2];
        int w = View.MeasureSpec.makeMeasureSpec(0,
                View.MeasureSpec.UNSPECIFIED);
        int h = View.MeasureSpec.makeMeasureSpec(0,
                View.MeasureSpec.UNSPECIFIED);
        view.measure(w, h);
        dpi[1] = view.getMeasuredHeight();
        dpi[0] = view.getMeasuredWidth();
        return dpi;
    }
private void saveImg(Bitmap bitmap,String path, Runnable r) {
        // TODO Auto-generated method stub
        saveMyBitmap(path, bitmap,r);// 将图像保存到SD卡中
    }
    public void saveMyBitmap(String bitName, Bitmap mBitmap, Runnable r) {
        // 先创建要保存图片的文件夹,然后在创建图片
        ff = new File(Environment.getExternalStorageDirectory()
                .getAbsoluteFile() + File.separator + "saveBitmap");
        if (!ff.exists()) {
            ff.mkdirs();
        }
        fi = new File(ff, bitName);
        //
        FileOutputStream fOut = null;
        try {
            fOut = new FileOutputStream(fi);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //图片压缩
        Bitmap  bitmap=comp(mBitmap);
        // 把bitmap保存到file中
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
        //图片上传
        loadBitmap(bitName);
        try {
            fOut.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

5.上传方法

/**
     * 上传图片
     *
     * */
    public void loadBitmap(String bitName){
        ff = new File(Environment.getExternalStorageDirectory()
                .getAbsoluteFile() + File.separator + "saveBitmap");
        if (!ff.exists()) {
            ff.mkdirs();
        }
        fi = new File(ff, bitName);
            Log.d("file", fi.getAbsolutePath());
        try {
            //图片上传方法
             HttpFile u = new HttpFile(Url);
                u.addFileParameter("file", fi);
                u.addTextParameter("userId",  "userId"));
                byte[] b = u.send();
                String result = new String(b);
                System.out.println(result);
                Gson gson=new Gson();
                CarUrl carUrl=gson.fromJson(result, CarUrl.class);
                Log.d("carurl", carUrl.url);

                Message msg=mHandler.obtainMessage();
                msg.what=100;
                msg.obj=r;
                mHandler.sendMessage(msg);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
时间: 2024-08-08 14:06:06

拍照和选择相册照片的相关文章

Ionic系列——调用摄像头拍照和选择图库照片功能的实现

1.需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传. 2.准备 ①.添加插件$cordovaCamera cordova plugin add cordova-plugin-camera ②.在controller中添加依赖 3.代码实现 $scope.takePhoto=function(){     var options = {                                                        

RN 使用第三方组件之react-native-image-picker(拍照/从相册获取图片)

首先给个github地址:https://github.com/react-community/react-native-image-picker  英文不行的看下面这个笔记 该插件可以同时给iOS和Android两个平台下使用,但是需要配置下各自平台下的文件 1.   首先,安装下该插件:      npm install react-native-image-picker@latest --save 2.   先别link,先添加进来该库之后 再link. 下面对于各自平台进行配置即可.  

android 拍照和从相册选择组件

android 拍照及从相册选择组件 单独封装到一个 activity 中便于更好的复用 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和不裁剪两种模式 /** * <pre> * 拍照及从相册选择弹出 activity * 成功后会发送 TakePhotoOutputEvent 事件,返回图片路径 * </pre> */ public class TakePhotoPopupActivity extends Activ

Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片,然后进行剪裁,最终设为头像或背景. 而在Android6.0之后,需要动态获取权限,而且Android7.0之后,无法直接根据拍照返回的URI拿到图片,这是因为从安卓7.0开始,直接使用本地真实路径被认为是不安全的,会抛出FileUriExposedExCeption异常,本文就是基于这个功能去针

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

小程序之选择拍照或者本地相册

html <!--pages/testdemo/testdemo.wxml--> <view class=""> <view class="container"> <view class='img_body'> <view class='img_list'> <view class='img_li' wx:for="{{imglist}}" wx:key="{{index

Android拍照调用系统相册仿微信封装总结,治疗各种崩溃,图片横竖问题压缩等问题。

项目下载地址:https://github.com/Aiushtha/android-PictureSelector 最早使用android调用系统拍照然后遇到很多空指针等问题 以及各种android 不同版本Intent取data有时候会空指针之类的api兼容问题 像使用红米note在开了很多应用后,再启动拍照系统,会发生拍照崩溃图片丢失等问题 用微信控件有时拍照有极小概率拍照无效等等奇怪的问题 其原因是因为Activity被回收了,变量变成null, 参考下面一篇博客 http://blog

iOS 拍照、从相册选图并对图片进行裁剪

裁剪图片的功能借助了Github上的项目AGSimpleImageEditorView.不多说,一步步的看Demo的实现过程吧: 1.下载Github上这个项目工程到本地并将其拖入到自己的工程中(前提是你已经建立了工程),由于AGSimpleImageEditorView不支持ARC,所以还要做相应的配置,设置编译器标签-fno-objc-arc: 另外,由于使用到图形处理和图片处理,所以还要另外导入两个库,如下图 完成后,按command+B编译试试,如果没问题,说明工程集成成功了,下面就可以

Android 拍照或者从相册获取图片的实现

我们常常会用到上传头像,或者发帖子的时候选择本地图片上传的功能.这个很常见 今天因为app的需求我研究了下.现在分享下. 其实不论是通过拍照还是从相册选取都会用到Intent 这是系统提供给我们用来调用系统方法的好用工具! 首先,需要设计下我们想怎么调用系统的拍照或者选取图片的方法 我们可以点击头像或者一个按钮然后弹出一个对话框,让用户自己 选择是拍照还是选择图片(如下图) . 那这个对话框怎么写呢.通过AlertDialog来实现(我们就给这个方法起名叫dialog): //对头像操作 pri