手机图片获取、裁剪、上传
来源:互联网 发布:外汇看盘软件 编辑:程序博客网 时间:2024/04/29 20:14
/** * 图片获取、裁剪、上传 * @author jiatao * */public class MainActivity extends Activity {private String TAG = "MainActivity";private static int CAMERA_REQUEST_CODE = 1;private static int ALBUM_REQUEST_CODE = 2;private static int CROP_REQUEST_CODE = 3;private ImageView iv_pic;private Button btn_camera, btn_album;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {iv_pic = (ImageView) findViewById(R.id.iv_pic);btn_camera = (Button) findViewById(R.id.btn_camera);btn_album = (Button) findViewById(R.id.btn_album);btn_camera.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, CAMERA_REQUEST_CODE);}});btn_album.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("image/*");startActivityForResult(intent, ALBUM_REQUEST_CODE);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode == CAMERA_REQUEST_CODE){if(data == null){return;}else{Bundle extras = data.getExtras();if(extras != null){Bitmap bm = extras.getParcelable("data");//iv_pic.setImageBitmap(bm);Uri uri = saveBitmap(bm);startImageZoom(uri);}}}else if(requestCode == ALBUM_REQUEST_CODE){if(data == null){//如果用户没有选择图片,返回return;}Uri uri;uri = data.getData();//有两种Uri,判断现在获取的是哪一种:content类型的uri不能直接进行复制操作;file类型的uri能直接进行复制操作;Log.e(TAG, uri.toString());Uri fileUri = convertUri(uri);//iv_pic.setImageURI(fileUri); startImageZoom(fileUri);}else if(requestCode == CROP_REQUEST_CODE) { if(data == null) { return; } Bundle extras = data.getExtras(); if(extras == null){ return; } Bitmap bm = extras.getParcelable("data"); iv_pic.setImageBitmap(bm);// sendImage(bm);//向服务器上传图片 }}/** * 传入content类型的uri,返回file类型的uri */private Uri convertUri(Uri uri){InputStream is = null;try {is = getContentResolver().openInputStream(uri);Bitmap bm = BitmapFactory.decodeStream(is);is.close();return saveBitmap(bm);//将Bitmap文件转为file类型的uri} catch (FileNotFoundException e) {e.printStackTrace();return null;} catch (IOException e) {e.printStackTrace();return null;}}/** * 传入Bitmap,返回file类型的uri */private Uri saveBitmap(Bitmap bm){//获得图片在SD卡中保存的文件夹目录,如果文件夹不存在,则创建这个文件夹File tmpDir = new File(Environment.getExternalStorageDirectory() + "/com.jiatao.avater"); if(!tmpDir.exists()) { tmpDir.mkdir(); } //创建要保存的图片对象 File img = new File(tmpDir.getAbsolutePath() + "avater.png"); try { FileOutputStream fos = new FileOutputStream(img); bm.compress(Bitmap.CompressFormat.PNG, 85, fos);//图片格式、压缩比例、图片源 fos.flush();//刷新输出流 fos.close();//关闭输出流 return Uri.fromFile(img);//从写入的文件中返回一个file类型的uri作为返回值返回 } catch (FileNotFoundException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; }}/** * 裁剪图片 */private void startImageZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 150); intent.putExtra("outputY", 150); intent.putExtra("return-data", true); startActivityForResult(intent, CROP_REQUEST_CODE); }/** * 上传图片 */private void sendImage(Bitmap bm) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 60, stream); byte[] bytes = stream.toByteArray(); String img = new String(Base64.encodeToString(bytes, Base64.DEFAULT));//要上传的参数 //调用接口上传图片即可 }}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.cctvjiatao.screenshots.MainActivity" > <ImageView android:id="@+id/iv_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:src="@drawable/ic_launcher" /> <Button android:id="@+id/btn_camera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/iv_pic" android:layout_centerHorizontal="true" android:text="拍照" /> <Button android:id="@+id/btn_album" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_camera" android:layout_below="@+id/btn_camera" android:text="相册" /></RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cctvjiatao.screenshots" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
0 0
- 手机图片获取、裁剪、上传
- android 图片获取裁剪上传
- 手机端图片上传--支持图片裁剪
- Android手机调用系统相机拍照、裁剪以及获取Url上传图片
- Android获取图片、裁剪、压缩、上传头像
- HTML5 MUI 手机预览图片,裁剪上传base64,保存数据库
- android 获取手机图片裁剪后分享 2
- 图片裁剪上传
- 图片裁剪预览上传
- 图片裁剪上传
- 手机拍照及裁剪图片
- C#图片上传水印裁剪
- PHP Uploadify图片上传裁剪
- java 上传图片裁剪方法
- 图片选图,上传,裁剪
- Android 选择图片裁剪,上传
- php 图片上传与裁剪
- jQuery+PHP上传裁剪图片
- c# GroupBox 只修改标题的字体和颜色
- 构造方法和方法
- HBase 系统架构
- 在MVC程序中,使用泛型仓储模式和工作单元实现增删查改
- ExtJs4 笔记(14) layout 布局
- 手机图片获取、裁剪、上传
- 前端开发工程师的发展方向
- 把讯飞语音识别整合到自己的android项目中
- MVC EF 修改 封装类 通用泛型方法
- Codeforces593B. Anton and Lines
- 人生哲学(老板为何喜欢坐头等舱?)
- Netty4.0学习笔记系列之五:自定义通讯协议
- 起底微信购物:背靠京东腾讯两棵大树也难乘凉
- Python 正则表达式辨析,原始字符串