上传头像(拍照或者本地上传)
来源:互联网 发布:完美软件视频 编辑:程序博客网 时间:2024/05/21 11:04
activity_main.xml
<LinearLayout 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:gravity="center_horizontal" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="头像" /> <ImageView android:id="@+id/iv_personal_icon" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="end" android:src="@mipmap/ic_launcher" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="用户名" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="end" android:text="12345" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="昵称" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="end" android:text="12345" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="性别" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="end" android:text="男" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="出生日期" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="end" android:text="12345" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2.5" android:background="#ddd" /> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:id="@+id/btn_change" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="center_horizontal" android:text="拍照" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:id="@+id/btn_change1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="center_horizontal" android:text="从相册选取" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_weight="1" android:gravity="center_horizontal" android:text="取消" /> </LinearLayout></LinearLayout>ImageUtils.java
package app.my.com.day19;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.net.Uri;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * Created by lenovo on 2017/12/20. */public class ImageUtils { public static String savePhoto(Bitmap photoBitmap, String path, String photoName) { String localPath = null; if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } File photoFile = new File(path, photoName + ".png"); FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(photoFile); if (photoBitmap != null) { if (photoBitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream)) { // 转换完成 localPath = photoFile.getPath(); fileOutputStream.flush(); } } } catch (FileNotFoundException e) { photoFile.delete(); localPath = null; e.printStackTrace(); } catch (IOException e) { photoFile.delete(); localPath = null; e.printStackTrace(); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); fileOutputStream = null; } } catch (IOException e) { e.printStackTrace(); } } } return localPath; } /** * 转换图片成圆形 * * @param bitmap 传入Bitmap对象 * @param tempUri * @return */ public static Bitmap toRoundBitmap(Bitmap bitmap, Uri tempUri) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); float roundPx; float left,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom; if (width <= height) { roundPx = width / 2; top = 0; bottom = width; left = 0; right = width; height = width; dst_left = 0; dst_top = 0; dst_right = width; dst_bottom = width; } else { roundPx = height / 2; float clip = (width - height) / 2; left = clip; right = width - clip; top = 0; bottom = height; width = height; dst_left = 0; dst_top = 0; dst_right = height; dst_bottom = height; } Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom); final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom); final RectF rectF = new RectF(dst); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, src, dst, paint); return output; }}
MainActivity.java
package app.my.com.day19;import android.app.Activity;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Environment;import android.provider.MediaStore;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import java.io.File;public class MainActivity extends Activity { protected static final int CHOOSE_PICTURE = 0; protected static final int TAKE_PICTURE = 1; private static final int CROP_SMALL_PICTURE = 2; protected static Uri tempUri; private ImageView iv_personal_icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView btn_change = findViewById(R.id.btn_change); TextView btn_change1 = findViewById(R.id.btn_change1); iv_personal_icon = (ImageView) findViewById(R.id.iv_personal_icon); btn_change.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showChoosePicDialog(); } }); btn_change1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showChoosePicDialog(); } }); } /** * 显示修改头像的对话框 */ protected void showChoosePicDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("设置头像"); String[] items = {"选择本地照片", "拍照"}; builder.setNegativeButton("取消", null); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case CHOOSE_PICTURE: // 选择本地照片 Intent openAlbumIntent = new Intent( Intent.ACTION_GET_CONTENT); openAlbumIntent.setType("image/*"); startActivityForResult(openAlbumIntent, CHOOSE_PICTURE); break; case TAKE_PICTURE: // 拍照 Intent openCameraIntent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); tempUri = Uri.fromFile(new File(Environment .getExternalStorageDirectory(), "image.jpg")); // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri); startActivityForResult(openCameraIntent, TAKE_PICTURE); break; } } }); builder.create().show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { // 如果返回码是可以用的 switch (requestCode) { case TAKE_PICTURE: startPhotoZoom(tempUri); // 开始对图片进行裁剪处理 break; case CHOOSE_PICTURE: startPhotoZoom(data.getData()); // 开始对图片进行裁剪处理 break; case CROP_SMALL_PICTURE: if (data != null) { setImageToView(data); // 让刚才选择裁剪得到的图片显示在界面上 } break; } } } /** * 裁剪图片方法实现 * * @param uri */ protected void startPhotoZoom(Uri uri) { if (uri == null) { Log.i("tag", "The uri is not exist."); } tempUri = uri; Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 150); intent.putExtra("outputY", 150); intent.putExtra("return-data", true); startActivityForResult(intent, CROP_SMALL_PICTURE); } /** * 保存裁剪之后的图片数据 * * @param * @param */ protected void setImageToView(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); photo = ImageUtils.toRoundBitmap(photo, tempUri); // 这个时候的图片已经被处理成圆形的了 iv_personal_icon.setImageBitmap(photo); uploadPic(photo); } } private void uploadPic(Bitmap bitmap) { // 上传至服务器 // ... 可以在这里把Bitmap转换成file,然后得到file的url,做文件上传操作 // 注意这里得到的图片已经是圆形图片了 // bitmap是没有做个圆形处理的,但已经被裁剪了 String imagePath = ImageUtils.savePhoto(bitmap, Environment .getExternalStorageDirectory().getAbsolutePath(), String .valueOf(System.currentTimeMillis())); Log.e("imagePath", imagePath + ""); if (imagePath != null) { // 拿着imagePath上传了 // ... Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_SHORT).show(); } }}
阅读全文
0 0
- 上传头像(拍照或者本地上传)
- android:拍照/本地上传头像+本地缓存
- Android上传本地图片或者拍照上传
- Android设置拍照或者上传本地图片
- android 从本地或者拍照上传图片
- 上传头像 拍照 相册
- Android头像--拍照上传
- 两分钟搞定从图库或者拍照上传头像~
- 手机端本地图片或者拍照的上传功能
- ios 上传头像 从本地获取照片、拍照及剪裁并上传到界面上
- 通过照相机拍照或者图库选择图片上传给服务器作为头像
- php实现手机拍照上传头像功能
- php实现手机拍照上传头像功能
- Android 上传头像的拍照跟相册
- 本地-拍照上传到服务器
- android 拍照上传及本地上传
- Android 图片拍照上传、本地上传
- HTML上传本地图片or拍照上传
- Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程总结
- UUML和绘图工具Visio介绍
- 蓝桥杯ALGO-91Anagrams问题
- Tomcat不够轻量?那就自己写一个服务器呗(Netty-demo)
- Android Studio的.gitignore以及gitignore无效的解决
- 上传头像(拍照或者本地上传)
- Android消息推送接收后,通知栏的显示
- python语言
- angular视频教程,需要的可以看看
- JVM系列五:JVM监测&工具
- python基础-linux下ipython
- PHP常见的设计模式之:注册树模式
- 修改数据库控制文件多路径启库时出现ORA-00214
- Codeforces Round #453 (Div. 2) A,B