Android实现本地上传图片并设置为圆形头像
作者:hebedich 时间:2022-05-17 03:50:28
先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像。
因为上传图片用到bmob的平台,所以要到bmob(http://www.bmob.cn)申请密钥。
效果图:
核心代码:
public class MainActivity extends Activity {
private ImageView iv;
private String appKey=""; //填写你的Application ID
private String path=Environment.getExternalStorageDirectory()+"/11.jpeg"; //要上传的图片的路径
public final int SIZE=2*1024;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bmob.initialize(this, appKey); //初始化bmob SDK
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
// TODO Auto-generated method stub
iv=(ImageView)findViewById(R.id.iv);
}
/**
* 上传文件到bmob后台
* */
public void upload(View v){
final BmobFile file=new BmobFile(new File(path));
file.uploadblock(this, new UploadFileListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
Person p=new Person();
p.setUrl(file.getFileUrl(MainActivity.this));
p.save(MainActivity.this);
MyTask task=new MyTask();
task.execute(file.getFileUrl(MainActivity.this));
toast("上传成功 ");
}
@Override
public void onFailure(int arg0, String arg1) {
// TODO Auto-generated method stub
toast("上传失败 "+arg1);
Log.i("---------", "------error "+arg1);
}
});
}
/**
* 根据URL获取Bitmap
* */
public Bitmap getHttpBitmap(String url){
Bitmap bitmap=null;
URL myUrl;
try {
myUrl=new URL(url);
HttpURLConnection conn=(HttpURLConnection)myUrl.openConnection();
conn.setConnectTimeout(5000);
conn.connect();
InputStream is=conn.getInputStream();
bitmap=BitmapFactory.decodeStream(is);
//把bitmap转成圆形
bitmap=toRoundBitmap(bitmap);
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回圆形bitmap
return bitmap;
}
/**
* 把bitmap转成圆形
* */
public Bitmap toRoundBitmap(Bitmap bitmap){
int width=bitmap.getWidth();
int height=bitmap.getHeight();
int r=0;
//取最短边做边长
if(width<height){
r=width;
}else{
r=height;
}
//构建一个bitmap
Bitmap backgroundBm=Bitmap.createBitmap(width,height,Config.ARGB_8888);
//new一个Canvas,在backgroundBmp上画图
Canvas canvas=new Canvas(backgroundBm);
Paint p=new Paint();
//设置边缘光滑,去掉锯齿
p.setAntiAlias(true);
RectF rect=new RectF(0, 0, r, r);
//通过制定的rect画一个圆角矩形,当圆角X轴方向的半径等于Y轴方向的半径时,
//且都等于r/2时,画出来的圆角矩形就是圆形
canvas.drawRoundRect(rect, r/2, r/2, p);
//设置当两个图形相交时的模式,SRC_IN为取SRC图形相交的部分,多余的将被去掉
p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
//canvas将bitmap画在backgroundBmp上
canvas.drawBitmap(bitmap, null, rect, p);
return backgroundBm;
}
class MyTask extends AsyncTask<String, String, Bitmap>{
@Override
protected Bitmap doInBackground(String... arg0) {
// TODO Auto-generated method stub
String url=arg0[0];
Bitmap bm=getHttpBitmap(url);
return bm;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
iv.setImageBitmap(result);
}
}
public void toast(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
以上所述就是本文的全部内容了,希望大家能喜欢。
标签:Android,上传图片,圆形头像
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java实现淘宝秒杀聚划算抢购自动提醒源码
2022-09-11 10:11:53
简单理解java泛型的本质(非类型擦除)
2023-10-13 03:54:34
android 6.0 写入SD卡的权限申请实例讲解
2023-07-27 03:12:37
Java 十大排序算法之计数排序刨析
2023-11-28 19:21:26
![](https://img.aspxhome.com/file/2023/3/68133_0s.png)
详解Java中字符流与字节流的区别
2023-01-14 00:19:58
SpringMVC整合mybatis实例代码
2022-09-24 08:22:03
java创建线程的两种方法区别
2023-11-11 09:17:52
Android Activity 不能被截屏的解决方法
2021-06-28 08:37:35
Unity调用C++ dll实现打开双目相机
2022-05-28 13:19:51
![](https://img.aspxhome.com/file/2023/0/77270_0s.png)
Android一行代码实现圆形头像
2022-02-23 02:00:25
![](https://img.aspxhome.com/file/2023/7/92577_0s.jpg)
Java数据结构之环形链表和约瑟夫问题详解
2023-07-19 11:02:32
![](https://img.aspxhome.com/file/2023/5/83165_0s.jpg)
Java生成10个1000以内的随机数并用消息框显示数组内容然后求和输出
2023-09-30 21:20:19
![](https://img.aspxhome.com/file/2023/1/79221_0s.png)
Java NIO实现聊天系统
2023-08-08 08:35:36
![](https://img.aspxhome.com/file/2023/5/88165_0s.jpg)
C#多线程系列之线程池
2023-02-21 17:25:44
Spring Security 图片验证码功能的实例代码
2023-11-17 14:23:56
![](https://img.aspxhome.com/file/2023/0/72350_0s.jpg)
如何修改FeginCilent定义的服务名到指定服务
2022-07-05 05:49:05
Springboot整合支付宝支付功能
2023-07-02 17:38:09
SPRING IOC注入方式过程解析
2023-10-11 12:59:13
![](https://img.aspxhome.com/file/2023/4/66944_0s.png)
深入浅析Java Object Serialization与 Hadoop 序列化
2023-07-30 17:02:16
vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离
2021-06-16 04:05:47
![](https://img.aspxhome.com/file/2023/0/72480_0s.png)