zoukankan      html  css  js  c++  java
  • android调用照相机拍照获取照片并做简单剪裁

    引用转载http://www.cnblogs.com/eyu8874521/archive/2012/07/20/2600697.html

     

    效果:

     

     

     

     

     

    客服端代码:

     
    1. package com.cn.lxz.zhaopian;  
    2.   
    3. import java.io.File;  
    4. import java.io.IOException;  
    5. import java.text.SimpleDateFormat;  
    6. import java.util.Date;  
    7. import java.util.HashMap;  
    8. import java.util.Map;  
    9.   
    10. import lxz.utils.android.graphics.GraphicsBitmapUtils;  
    11. import lxz.utils.android.net.UploadFile;  
    12. import lxz.utils.android.resource.AndroidClass;  
    13.   
    14. import android.app.Activity;  
    15. import android.app.AlertDialog;  
    16. import android.content.DialogInterface;  
    17. import android.content.DialogInterface.OnClickListener;  
    18. import android.content.Intent;  
    19. import android.content.res.Resources;  
    20. import android.graphics.Bitmap;  
    21. import android.graphics.drawable.BitmapDrawable;  
    22. import android.graphics.drawable.Drawable;  
    23. import android.net.Uri;  
    24. import android.os.Bundle;  
    25. import android.os.Environment;  
    26. import android.os.Handler;  
    27. import android.os.Message;  
    28. import android.provider.MediaStore;  
    29. import android.view.View;  
    30. import android.widget.Button;  
    31. import android.widget.EditText;  
    32. import android.widget.ImageView;  
    33. import android.widget.Toast;  
    34.   
    35. public class Activity_UploadPic extends Activity implements Handler.Callback {  
    36.     /** Called when the activity is first created. */  
    37.   
    38.     ImageView view_pic;  
    39.     Button view_btn;  
    40.     EditText view_et;  
    41.     // 线程通知上传成功  
    42.     final Handler upLoadhand = new Handler(this);  
    43.     String[] arrayString = { "拍照", "相册" };  
    44.     String title = "上传照片";  
    45.   
    46.     // 上传的地址  
    47.     String uploadUrl = "http://192.168.1.101:8080/UploadServlet/UploadServlet?";  
    48.     String filename = "照片";  
    49.     private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照  
    50.     private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择  
    51.     private static final int PHOTO_REQUEST_CUT = 3;// 结果  
    52.   
    53.     @Override  
    54.     public boolean handleMessage(Message msg) {  
    55.   
    56.         if (msg.obj != null) {  
    57.             Drawable drawable = new BitmapDrawable((Bitmap) msg.obj);  
    58.             view_pic.setBackgroundDrawable(drawable);  
    59.             Toast.makeText(this, "获得图片并且头像上传成功", 3).show();  
    60.         }else  
    61.         {  
    62.             Toast.makeText(this, "获得图片,但是头像上传失败,请注意配置uploadUrl上传地址", 3).show();  
    63.         }  
    64.       
    65.         return false;  
    66.     }  
    67.   
    68.     // 创建一个以当前时间为名称的文件  
    69.     File tempFile = new File(Environment.getExternalStorageDirectory(),  
    70.             getPhotoFileName());  
    71.   
    72.     // 对话框  
    73.     OnClickListener onDialogClick = new OnClickListener() {  
    74.         @Override  
    75.         public void onClick(DialogInterface dialog, int which) {  
    76.             switch (which) {  
    77.             case 0:  
    78.                 startCamearPicCut(dialog);// 开启照相  
    79.                 break;  
    80.             case 1:  
    81.                 startImageCaptrue(dialog);// 开启图库  
    82.                 break;  
    83.             default:  
    84.                 break;  
    85.             }  
    86.         }  
    87.   
    88.         private void startCamearPicCut(DialogInterface dialog) {  
    89.             // TODO Auto-generated method stub  
    90.             dialog.dismiss();  
    91.             // 调用系统的拍照功能  
    92.             Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
    93.   
    94.             intent.putExtra("camerasensortype", 2);// 调用前置摄像头  
    95.             intent.putExtra("autofocus", true);// 自动对焦  
    96.             intent.putExtra("fullScreen", false);// 全屏  
    97.             intent.putExtra("showActionIcons", false);  
    98.             // 指定调用相机拍照后照片的储存路径  
    99.             intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));  
    100.             startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO);  
    101.         }  
    102.   
    103.         private void startImageCaptrue(DialogInterface dialog) {  
    104.             // TODO Auto-generated method stub  
    105.             dialog.dismiss();  
    106.             Intent intent = new Intent(Intent.ACTION_PICK, null);  
    107.             intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  
    108.                     "image/*");  
    109.             startActivityForResult(intent, PHOTO_REQUEST_GALLERY);  
    110.         }  
    111.     };  
    112.   
    113.     @Override  
    114.     public void onCreate(Bundle savedInstanceState) {  
    115.         super.onCreate(savedInstanceState);  
    116.         setContentView(R.layout.main);  
    117.         init();  
    118.   
    119.     }  
    120.   
    121.     private void init() {  
    122.         // TODO Auto-generated method stub  
    123.         view_pic = (ImageView) findViewById(R.id.iv);  
    124.         view_btn = (Button) findViewById(R.id.btn);  
    125.         view_et = (EditText) findViewById(R.id.et);  
    126.         view_btn.setOnClickListener(new View.OnClickListener() {  
    127.   
    128.             @Override  
    129.             public void onClick(View v) {  
    130.                 // TODO Auto-generated method stub  
    131.                 AlertDialog.Builder dialog = AndroidClass.getListDialogBuilder(  
    132.                         Activity_UploadPic.this, arrayString, title,  
    133.                         onDialogClick);  
    134.                 dialog.show();  
    135.             }  
    136.         });  
    137.     }  
    138.   
    139.     // 使用系统当前日期加以调整作为照片的名称  
    140.     private String getPhotoFileName() {  
    141.         Date date = new Date(System.currentTimeMillis());  
    142.         SimpleDateFormat dateFormat = new SimpleDateFormat(  
    143.                 "'IMG'_yyyyMMdd_HHmmss");  
    144.         return dateFormat.format(date) + ".jpg";  
    145.     }  
    146.   
    147.     @Override  
    148.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    149.         super.onActivityResult(requestCode, resultCode, data);  
    150.         switch (requestCode) {  
    151.         case PHOTO_REQUEST_TAKEPHOTO:  
    152.             startPhotoZoom(Uri.fromFile(tempFile), 150);  
    153.             break;  
    154.   
    155.         case PHOTO_REQUEST_GALLERY:  
    156.             if (data != null) {  
    157.                 startPhotoZoom(data.getData(), 150);  
    158.             }  
    159.             break;  
    160.   
    161.         case PHOTO_REQUEST_CUT:  
    162.             if (data != null) {  
    163.                 setPicToView(data);  
    164.             }  
    165.             break;  
    166.         }  
    167.         super.onActivityResult(requestCode, resultCode, data);  
    168.     }  
    169.   
    170.     private void startPhotoZoom(Uri uri, int size) {  
    171.         Intent intent = new Intent("com.android.camera.action.CROP");  
    172.         intent.setDataAndType(uri, "image/*");  
    173.         // crop为true是设置在开启的intent中设置显示的view可以剪裁  
    174.         intent.putExtra("crop", "true");  
    175.   
    176.         // aspectX aspectY 是宽高的比例  
    177.         intent.putExtra("aspectX", 1);  
    178.         intent.putExtra("aspectY", 1);  
    179.   
    180.         // outputX,outputY 是剪裁图片的宽高  
    181.         intent.putExtra("outputX", size);  
    182.         intent.putExtra("outputY", size);  
    183.         intent.putExtra("return-data", true);  
    184.   
    185.         startActivityForResult(intent, PHOTO_REQUEST_CUT);  
    186.     }  
    187.   
    188.     // 将进行剪裁后的图片显示到UI界面上  
    189.     private void setPicToView(Intent picdata) {  
    190.         Bundle bundle = picdata.getExtras();  
    191.         if (bundle != null) {  
    192.             final Bitmap photo = bundle.getParcelable("data");  
    193.   
    194.             new Thread() {  
    195.   
    196.                 @Override  
    197.                 public void run() {  
    198.                     byte[] photodata = GraphicsBitmapUtils.Bitmap2Bytes(photo);  
    199.                     UploadFile uploadFile = new UploadFile(uploadUrl);  
    200.                     Map parameters = new HashMap();  
    201.                     parameters.put("msg", view_et.getText().toString());  
    202.                       
    203.                     boolean isUploadSuccess = false;  
    204.           
    205.                     try {  
    206.                         isUploadSuccess = uploadFile.defaultUploadMethod(  
    207.                                 photodata, filename, parameters);  
    208.                     } catch (IOException e) {  
    209.                         // TODO Auto-generated catch block  
    210.                         e.printStackTrace();  
    211.                     }  
    212.       
    213.                     if (isUploadSuccess) {  
    214.                         upLoadhand.obtainMessage(0, photo).sendToTarget();  
    215.                     } else {  
    216.                         upLoadhand.obtainMessage(-1, null).sendToTarget();  
    217.                     }  
    218.   
    219.                 }  
    220.             }.start();  
    221.   
    222.         }  
    223.     }  
    224.   
    225. }  

     

    服务器端

     

    1. package com.project3gabs.action;  
    2.   
    3.   
    4.   
    5. import java.io.File;  
    6. import java.io.FileOutputStream;  
    7. import java.io.IOException;  
    8. import java.io.InputStream;  
    9. import java.io.PrintWriter;  
    10. import java.net.URLEncoder;  
    11. import java.util.List;  
    12.   
    13. import javax.servlet.ServletException;  
    14. import javax.servlet.ServletResponse;  
    15. import javax.servlet.http.HttpServlet;  
    16. import javax.servlet.http.HttpServletRequest;  
    17. import javax.servlet.http.HttpServletResponse;  
    18.   
    19.   
    20. import org.apache.commons.fileupload.FileItem;  
    21. import org.apache.commons.fileupload.FileItemFactory;  
    22. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
    23. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
    24.   
    25. public class UploadServlet extends HttpServlet  
    26. {  
    27.     protected void service(HttpServletRequest request,  
    28.             HttpServletResponse response) throws ServletException, IOException  
    29.     {  
    30.           
    31.         System.out.println("服务器发现上传文件");  
    32.         System.out.println(this.getServletContext().getRealPath("/"));  
    33.           
    34.   
    35.         request.setCharacterEncoding("UTF-8");  
    36.           
    37.         if(request.getHeader("user-agent")!=null&&(request.getHeader("user-agent").toLowerCase().indexOf("mozilla")!=-1))   
    38.         {   
    39.             System.out.println("访问端-PC");  
    40.         }else   
    41.         {   
    42.             System.out.println("访问端-手机");  
    43.           
    44.         }  
    45.   
    46.           
    47.           
    48.         try {  
    49.             request.setCharacterEncoding("UTF-8"); // 设置处理请求参数的编码格式  
    50.             response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值  
    51.             PrintWriter out = response.getWriter();  
    52.             System.out.println("附加信息"+URLEncoder.encode(request.getParameter("msg"),"UTF-8"));  
    53.   
    54.         } catch (Exception e1) {  
    55.             // TODO Auto-generated catch block  
    56.             e1.printStackTrace();  
    57.         }  
    58.         try  
    59.         {  
    60.               
    61.               
    62.             // 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据  
    63.             FileItemFactory factory = new DiskFileItemFactory(); // 建立FileItemFactory对象  
    64.             ServletFileUpload upload = new ServletFileUpload(factory);  
    65.             // 分析请求,并得到上传文件的FileItem对象  
    66.             List<FileItem> items = upload.parseRequest(request);  
    67.             // 从web.xml文件中的参数中得到上传文件的路径  
    68.             String uploadPath = this.getServletContext().getRealPath("/")+"\upload\";  
    69.             File file = new File(uploadPath);  
    70.             if (!file.exists())  
    71.             {  
    72.                 file.mkdir();  
    73.             }  
    74.             String filename = null; // 上传文件保存到服务器的文件名  
    75.             InputStream is = null; // 当前上传文件的InputStream对象  
    76.             // 循环处理上传文件  
    77.               
    78.           
    79.               
    80.             for (FileItem item : items)  
    81.             {  
    82.                   
    83.                 // 处理普通的表单域  
    84.                 if (item.isFormField())  
    85.                 {  
    86.                     try {  
    87.                         System.out.println(item.getFieldName()+item.getString());  
    88.                     } catch (Exception e) {  
    89.                         // TODO Auto-generated catch block  
    90.                         e.printStackTrace();  
    91.                     }  
    92.                     if (item.getFieldName().equals("filename"))  
    93.                     {  
    94.                         // 如果新文件不为空,将其保存在filename中  
    95.                         if (!item.getString().equals(""))  
    96.                             filename = item.getString("UTF-8");  
    97.                         System.out.println("filename="+filename);  
    98.                     }  
    99.   
    100.                       
    101.                 }  
    102.                 // 处理上传文件  
    103.                 else if (item.getName() != null && !item.getName().equals(""))  
    104.                 {  
    105.                     // 从客户端发送过来的上传文件路径中截取文件名  
    106.                     filename = item.getName().substring(  
    107.                             item.getName().lastIndexOf("\") + 1);  
    108.                       
    109.                     is = item.getInputStream(); // 得到上传文件的InputStream对象  
    110.                   
    111.                 }  
    112.             }  
    113.             // 将路径和上传文件名组合成完整的服务端路径  
    114.             filename = uploadPath + filename;  
    115.             System.out.println("filename="+filename);  
    116.             // 如果服务器已经存在和上传文件同名的文件,则输出提示信息  
    117.             if (new File(filename).exists())  
    118.             {  
    119.                 new File(filename).delete();  
    120.             }  
    121.             // 开始上传文件  
    122.             if (!filename.equals(""))  
    123.             {  
    124.                 // 用FileOutputStream打开服务端的上传文件  
    125.                 FileOutputStream fos = new FileOutputStream(filename);  
    126.                 byte[] buffer = new byte[8192]; // 每次读8K字节  
    127.                 int count = 0;  
    128.                 // 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中  
    129.                 while ((count = is.read(buffer)) > 0)  
    130.                 {  
    131.                     fos.write(buffer, 0, count); // 向服务端文件写入字节流  
    132.                       
    133.                 }  
    134.                 fos.close(); // 关闭FileOutputStream对象  
    135.                 is.close(); // InputStream对象  
    136.                   
    137.                 System.out.println("文件上传成功!");  
    138.             }  
    139.         }  
    140.         catch (Exception e)  
    141.         {  
    142.   
    143.         }  
    144.     }  
    145. }  

     

     

    本文:Demo代码下载

  • 相关阅读:
    获取表信息(MSSQL)
    合并有数据的列
    isnull的使用方法
    查询SQLServer的启动时间
    查询数据库中有数据的表
    查询数据库中表使用的空间信息。
    SQL Server SA 密码丢失无法连接数据库怎么办?
    tensorflow 语法及 api 使用细节
    Python: PS 滤镜-- Fish lens
    中英文对照 —— 概念的图解
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3257745.html
Copyright © 2011-2022 走看看