Android拍照并保存(对图片进行压缩,分解)

项目中摘出来的一个小功能模块,有需要的朋友可以借鉴下。

效果图:

具体功能:将拍摄的照片保存到SDcard中

具体需求:

1.图片名保存格式:图片名称_手机型号_随机4位数.jpg

2.将图片分解,压缩,显示

3.写入SDCard卡保存

具体实现:

1.定义布局文件

2.编写业务代码

这里只对调用相机拍照、图片显示、保存  做介绍   并提供源码下载

点击按钮后:

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_getphoto:
                mPhotoName = mETphotoName.getEditableText().toString();
                mModel = mETmodel.getEditableText().toString();
                if(TextUtils.isEmpty(mPhotoName) || TextUtils.isEmpty(mModel)){
                    Toast.makeText(this,"请输入图片名称和型号",0).show();
                    return;
                }
                final String state = Environment.getExternalStorageState();
                if (Environment.MEDIA_MOUNTED.equals(state)) {
                    final Intent takePictureImIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    ContentValues values = new ContentValues();
                    mPhotoUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                    takePictureImIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mPhotoUri);
                    startActivityForResult(takePictureImIntent,REQUEST_CODE_TAKE_PICTURE);
                } else {
                    Toast.makeText(this,"请检查内存卡", 0).show();
                }
                break;

            default:
                break;
        }

    }

onActivityResult回调:

/* (non-Javadoc)
     * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {

            case REQUEST_CODE_TAKE_PICTURE:
                // 通过照相获取图片
                if (resultCode == Activity.RESULT_OK) {
                    final Uri uri = mPhotoUri;
                    Log.e("MainActivity",uri+"");
                    if (uri != null) {
                        processPicture(uri);
                    }

                    //提示保存图片
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("提示");
                    builder.setMessage("是否需要保存图片?");
                    builder.setNegativeButton("取消", null);
                    builder.setPositiveButton("是的", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            String resetPhotoName = mPhotoName+"_"+mModel+"_"+Utils.getRandomString(4);
                            Utils.savePhotoToSDCard(bitmap,Utils.genProjectPath(),resetPhotoName);
                            Toast.makeText(MainActivity.this,"成功--->"+Utils.genProjectPath()+resetPhotoName,0).show();

                            //清空文本框
                            mETphotoName.setText("");
                            mETmodel.setText("");

                            dialog.cancel();
                        }
                    });
                    builder.show();

                }
                break;

            default:
                super.onActivityResult(requestCode, resultCode, data);
                break;
        }
    }

图片显示:

/**
     * 图片显示
     * @param uri
     */
    private void processPicture(Uri uri) {
        final String[] projection = {MediaStore.Images.Media.DATA};
        final Cursor cursor = managedQuery(uri, projection, null, null, null);
        cursor.moveToFirst();
        final int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        String imagePath = cursor.getString(columnIndex);
        Log.e("MainActivity",imagePath);

        final String targetPath = BitmapUtils.toRegularHashCode(imagePath) + ".jpg";
        BitmapUtils.compressBitmap(imagePath, targetPath, 640);  //压缩
        bitmap = BitmapUtils.decodeBitmap(imagePath, 150);       //分解
        mImage.setImageBitmap(bitmap);                           //显示

        //上传服务器
        //final AvatarUrlUpdateRequest request = new AvatarUrlUpdateRequest(REQUEST_ID_AVATAR_URL_UPDATE,mFileName,targetPath,mLoginResult);
        //final LoginRequest request = new LoginRequest(0,"[email protected]","123456");
        //genericDataManager.retrieveData(request, this);

    }

源码下载地址:http://download.csdn.net/detail/gao_chun/8128717

时间: 2024-10-16 19:34:43

Android拍照并保存(对图片进行压缩,分解)的相关文章

android 拍照或者图库选择 压缩后 图片 上传

通过拍照或者从相册里选择图片通过压缩并上传时很多应用的常用功能,记录一下实现过程 一:创建个临时文件夹用于保存压缩后需要上传的图片 /** * path:存放图片目录路径 */ private String path = Environment.getExternalStorageDirectory().getPath() + "/XXX/"; /** * saveCatalog:保存文件目录 */ private File saveCatalog; /** * saveFile:保存

[Android] 拍照、截图、保存并显示在ImageView控件中

最近在做Android的项目,其中部分涉及到图像处理的内容.这里先讲述如何调用Camera应用程序进行拍照,并截图和保存显示在ImageView控件中以及遇到的困难和解决方法. PS:作者购买了本<Android第一行代码 著:郭霖>,参照里面的内容完成(推荐该书,前面的布局及应用非常不错).网上这类资料非常多,作者仅仅分享给初学者同时在线记录些内容,希望对大家有所帮助. 首先,设置activity_main.xml为LinearLayout布局且 android:orientation=&q

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

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

android调用系统相机拍照并保存在本地

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.app.Activity; import an

Android开发之大位图压缩水印处理

我们在发微博或者csdn博文的时候都可以给图片加上一个水印,一个独立的标识,那是怎么实现的呢?先封装一个BitmapTools封装类,该类要解决的问题是一将突破存储至sdcard中,二给图片加上水印. BitmapTools package com.example.g11_bitmap04; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import android.conte

Android拍照,剪切,并放入SD卡

android拍照之后,先对图片进行一次剪切,最后将图片保存到指定的目录.在项目需要用户拍照,并对图片进行剪切后,发送到服务器端做验证.这里贴出来一个小例子,能够实现基本的功能.文章最后会给出来demo.界面上就是一个点击事件. 1.首先点击事件中启动拍照,这里写死了图片的名称.实际上可以通过在公用的类中定义一个静态变量来操作. public void tackPhoto() { String status = Environment.getExternalStorageState(); if

你需要知道的Android拍照适配方案

拍照功能实现 Android 程序上实现拍照功能的方式分为两种:第一种是利用相机的 API 来自定义相机,第二种是利用 Intent 调用系统指定的相机拍照.下面讲的内容都是针对第二种实现方式的适配. 通常情况下,我们调用拍照的业务场景是如下面这样的: A 界面,点击按钮调用相机拍照: A 界面得到拍完照片,跳转到 B 界面进行预览: B 界面有个按钮,点击后触发某个业务流程来处理这张照片: 实现的大体流程代码如下: 01.//1.调用相机 02.File mPhotoFile = new Fi

你需要知道的 Android 拍照适配方案

近段时间,家里陪自己度过大学四年的电脑坏了,挑选好的新电脑配件终于在本周全部到货,自己动手完成组装.从AMD到i7的CPU,6G内存到14G内存,打开 AndroidStudio 的速度终于杠杆的上去了,感动到泪流满面啊!!!!!!!扯了这么多,回归一下正题,还是来说说本篇文章要写什么吧!说起调用系统相机来拍照的功能,大家肯定不陌生,现在所有应用都具备这个功能.例如最基本的,用户拍照上传头像.Android开发的孩纸都知道,碎片化给拍照这个功能的实现带来挺多头疼的问题.所以,我决定写写一些网上不

Android自定义imageview可对图片进行多点缩放和拖动

package com.msstudent.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; i