选择照片、拍照裁剪上传
来源:互联网 发布:java compareto返回值 编辑:程序博客网 时间:2024/05/17 05:15
在做项目时免不了要上传用户头像这些操作,有时是从相册里面直接取,有时是使用照相机拍照过后进行截图的,现在来实现以下这两种方法。
- 布局文件
- Java代码
布局文件,使用了个第三方的圆形ImageView:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="circleimageview.myself.com.croppicturedemo.MainActivity"><Button android:id="@+id/btn_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="相册" /><Button android:id="@+id/btn_cammer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/btn_pic" android:text="相机" /><de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/iv" android:layout_width="96dp" android:layout_height="96dp" app:civ_border_color="#FF000000" app:civ_border_width="2dp" /></RelativeLayout>
java代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {/** * 指定拍摄图片文件位置避免获取到缩略图 */private File outFile;/** * 选择头像相册选取 */private static final int REQUESTCODE_PICK = 1;/** * 裁剪好头像-设置头像 */private static final int REQUESTCODE_CUTTING = 2;/** * 选择头像拍照选取 */private static final int PHOTO_REQUEST_TAKEPHOTO = 3;/** * 裁剪好的头像的Bitmap */private Bitmap currentBitmap;private CircleImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_pic = (Button) findViewById(R.id.btn_pic); Button btn_cammer = (Button) findViewById(R.id.btn_cammer); btn_pic.setOnClickListener(this); btn_cammer.setOnClickListener(this); iv = (CircleImageView)findViewById(R.id.iv);}@Overridepublic void onClick(View v) { switch (v.getId()) { case R.id.btn_pic: openPic(); break; case R.id.btn_cammer: openCamera(); break; }}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { // 进行判断是那个操作跳转回来的,如果是裁剪跳转回来的这块就要把图片现实到View上,其他两种的话都把数据带入裁剪界面 switch (requestCode) { //相册 case REQUESTCODE_PICK: if (data == null || data.getData() == null) { return; } startPhotoZoom(data.getData()); //图片的路径 String s = data.getData().getPath().toString(); Log.i("ss","相片的路径:"+s); break; //裁剪 case REQUESTCODE_CUTTING: if (data != null) { setPicToView(data); } break; //拍照 case PHOTO_REQUEST_TAKEPHOTO: startPhotoZoom(Uri.fromFile(outFile)); //图片的路径 String s2 = Uri.fromFile(outFile).getPath().toString(); Log.i("ss","照相机照的照片路径:"+s2); break; } super.onActivityResult(requestCode, resultCode, data);}/** * 把裁剪好的图片设置到View上或者上传到网络 * * @param data */private void setPicToView(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { /** 可用于图像上传 */ currentBitmap = extras.getParcelable("data"); iv.setImageBitmap(currentBitmap); }}/** * 调用系统的图片裁剪 * * @param data */private void startPhotoZoom(Uri data) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(data, "image/*"); intent.putExtra("crop", true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("scale", true);//黑边 intent.putExtra("scaleUpIfNeeded", true);//黑边 intent.putExtra("return-data", true); intent.putExtra("noFaceDetection", true); Uri cropUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath() + "/wangjunling/image/crop.png")); intent.putExtra(MediaStore.EXTRA_OUTPUT,cropUri); startActivityForResult(intent, REQUESTCODE_CUTTING); String s1 = cropUri.getPath().toString(); Log.i("ss","截图的路径:"+s1);}/** * 打开相册 */private void openPic() { Intent pickIntent = new Intent(Intent.ACTION_PICK, null); pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*"); startActivityForResult(pickIntent, REQUESTCODE_PICK);}/** * 打开相机 */private void openCamera() { String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File outDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); if (!outDir.exists()) { outDir.mkdirs(); } outFile = new File(outDir, System.currentTimeMillis() + ".jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outFile)); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO); } else { Log.e("CAMERA", "请确认已经插入SD卡"); }}}
0 0
- 选择照片、拍照裁剪上传
- Android开发--拍照选择照片裁剪
- Android 中拍照、相册选择、裁剪照片
- Android 拍照,从图库选择照片,并裁剪,上传到服务器
- 拍照,裁剪照片
- 获取本地照片和拍照上传并裁剪的实现
- phonegap下封装ios照片拍照、选取、裁剪、上传接口
- Android拍照,选择图片,裁剪和上传服务器
- 带你实现拍照||从相册选择->裁剪->上传服务器
- Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案
- android 选择图片拍照并剪切照片上传到服务器
- 安卓拍照和选择照片上传功能代码
- Android拍照或图库选择照片上传(附服务器端代码)
- 【整理】Cordova 从相册中选择照片/拍照并上传
- 拍照,系统选择照片
- 拍照,选择照片功能
- 拍照,选择照片
- android 拍照上传照片
- 【JSOI2015】非诚勿扰
- JQuery操作<select>元素
- 新增商品时候改变商品在所选分类中的默认排序
- 【Python】学习笔记——-6.1、使用模块
- 如何手机访问电脑服务器上的网页?
- 选择照片、拍照裁剪上传
- Python递归解决汉诺塔问题
- 【Python】学习笔记——-6.2、使用第三方模块
- 前端性能优化最佳实践
- codeforces 765D 思维
- maven配置文件assembly
- 读《卧底经济学(珍藏版)》- 专家是一致对外的
- Android 蓝牙如何使用
- linux小白操作合集