先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像。
因为用到bmob(http://www.bmob.cn)的平台,所以要用到bmob官网申请密钥(Application ID)。
下面是代码:
public class Person extends BmobObject { private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
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轴方向的半径时, <span style="white-space:pre"> </span>//且都等于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(); } }