Android头像上传与图片处理实战教程
42 浏览量
更新于2024-09-03
收藏 206KB PDF 举报
"本文将介绍如何在Android应用中实现个人中心的头像上传功能,包括图片的编码、截取以及相关的实例操作。"
在Android开发中,个人中心的头像上传是一项常见的需求。这个过程通常涉及从用户设备获取图片,对其进行处理(如截取),然后编码成适合网络传输的格式(如Base64),最后上传到服务器。在这个实例中,我们将使用Okhttp作为网络库来处理上传请求。
首先,确保在AndroidManifest.xml文件中添加了访问网络的权限:
```xml
<uses-permission android:name="android.permission.INTERNET" />
```
接下来,我们需要一个用于选取图片的界面,通常包含一个显示头像的ImageView和两个按钮,一个用于打开相机拍照,另一个用于从相册选取图片。在MainActivity的onCreate方法中设置这些控件并绑定点击事件:
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_img = findViewById(R.id.iv_img);
bt_camera = findViewById(R.id.bt_camera);
bt_xiangce = findViewById(R.id.bt_xiangce);
bt_camera.setOnClickListener(this);
bt_xiangce.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == bt_camera) {
// 拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
} else if (v == bt_xiangce) {
// 从相册选取
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}
}
```
当用户选择图片后,需要进行图片裁剪操作。为此,我们需要在AndroidManifest.xml中添加裁剪权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
```
然后处理返回的结果,并调用系统裁剪图片的Intent:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == PHOTO_REQUEST_CAREMA) {
// 拍照后裁剪
Uri imageUri = Uri.fromFile(getOutputMediaFile());
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_REQUEST_CUT);
} else if (requestCode == PHOTO_REQUEST_GALLERY) {
// 从相册选择后裁剪
if (data != null) {
Uri selectedImage = data.getData();
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(selectedImage, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}
} else if (requestCode == PHOTO_REQUEST_CUT) {
// 裁剪完成后处理
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap bitmap = extras.getParcelable("data");
iv_img.setImageBitmap(bitmap);
// 图片处理后保存到本地
saveBitmapToFile(bitmap);
// 转换成Base64编码
String base64String = encodeBitmapToBase64(bitmap);
// 使用Okhttp上传头像
uploadAvatar(base64String);
}
}
}
}
```
在上面的代码中,`getOutputMediaFile()`是自定义的方法,用于在外部存储创建临时图片文件,`encodeBitmapToBase64(Bitmap)`则用于将Bitmap对象转换为Base64字符串。`uploadAvatar(String base64String)`是使用Okhttp发送上传请求的函数,具体实现根据服务器接口定义来编写。
总结来说,Android个人中心头像上传的过程主要包括以下几个步骤:
1. 获取权限:网络权限和写入外部存储权限。
2. 用户选择图片:通过相机拍照或从相册选取。
3. 图片裁剪:使用系统裁剪工具按比例裁剪图片。
4. 图片处理:将裁剪后的图片保存至本地,然后转换为Base64编码。
5. 上传头像:通过网络库(如Okhttp)将Base64编码的图片发送到服务器。
以上就是Android个人中心头像上传、图片编码和截取的完整实例,开发者可以根据自己的需求进行调整和优化。
2019-04-10 上传
2014-06-11 上传
2013-11-26 上传
2014-07-26 上传
2019-07-29 上传
2015-08-12 上传
2015-03-07 上传
2014-10-29 上传
weixin_38621897
- 粉丝: 6
- 资源: 956
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全