文档章节

用户头像设置

我是IT码农
 我是IT码农
发布于 2015/05/29 10:05
字数 628
阅读 43
收藏 0
  1. 得到图片:方法一:本地选取图片,剪裁出需要那部分,方法二:打开摄像头照相,把照片选取需要部分

  2. 上传到服务器,更新本地头像:

    代码如下:



  3. public class AvaterMainActivity extends Activity {


  4.     private static int CAMERA_REQUEST_CODE = 1;

  5.     private static int GALLERY_REQUEST_CODE = 2;

  6.     private static int CROP_REQUEST_CODE = 3;


  7.     @Override

  8.     protected void onCreate(Bundle savedInstanceState) {

  9.         super.onCreate(savedInstanceState);

  10.         setContentView(R.layout.test_activity_main);


  11.         Button btn_camera = (Button)findViewById(R.id.btn_camera);

  12.         btn_camera.setOnClickListener(new View.OnClickListener() {

  13.             @Override

  14.             public void onClick(View v) {

  15.                 

  16.                

  17.             if (hasBackFacingCamera() || hasFrontFacingCamera() ) {

  18.             

  19.                     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

  20.                 startActivityForResult(intent, CAMERA_REQUEST_CODE);

  21.             }

  22.             

  23.             else {

  24.             

  25. ToastManager.getInstance(AvaterMainActivity.this).show("没有找到摄像头");


  26. }

  27.                 

  28.             }

  29.         });


  30.         Button btn_gallery = (Button)findViewById(R.id.btn_gallery);

  31.         btn_gallery.setOnClickListener(new View.OnClickListener() {

  32.             @Override

  33.             public void onClick(View v) {

  34.                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

  35.                 intent.setType("image/*");

  36.                 startActivityForResult(intent, GALLERY_REQUEST_CODE);

  37.             }

  38.         });

  39.     }


  40.     private Uri saveBitmap(Bitmap bm)

  41.     {

  42.         File tmpDir = new File(Environment.getExternalStorageDirectory() + "/com.zhangzhengfa.avater");

  43.         if(!tmpDir.exists())

  44.         {

  45.             tmpDir.mkdir();

  46.         }

  47.         File img = new File(tmpDir.getAbsolutePath() + "avater.png");

  48.         try {

  49.             FileOutputStream fos = new FileOutputStream(img);

  50.             bm.compress(Bitmap.CompressFormat.PNG, 85, fos);

  51.             fos.flush();

  52.             fos.close();

  53.             return Uri.fromFile(img);

  54.         } catch (FileNotFoundException e) {

  55.             e.printStackTrace();

  56.             return null;

  57.         } catch (IOException e) {

  58.             e.printStackTrace();

  59.             return null;

  60.         }

  61.     }


  62.     private Uri convertUri(Uri uri)

  63.     {

  64.         InputStream is = null;

  65.         try {

  66.             is = getContentResolver().openInputStream(uri);

  67.             Bitmap bitmap = BitmapFactory.decodeStream(is);

  68.             is.close();

  69.             return saveBitmap(bitmap);

  70.         } catch (FileNotFoundException e) {

  71.             e.printStackTrace();

  72.             return null;

  73.         } catch (IOException e) {

  74.             e.printStackTrace();

  75.             return null;

  76.         }

  77.     }

  78.     private void startImageZoom(Uri uri)

  79.     {

  80.         Intent intent = new Intent("com.android.camera.action.CROP");

  81.         intent.setDataAndType(uri, "image/*");

  82.         intent.putExtra("crop", "true");

  83.         intent.putExtra("aspectX", 1);

  84.         intent.putExtra("aspectY", 1);

  85.         intent.putExtra("outputX", 150);

  86.         intent.putExtra("outputY", 150);

  87.         intent.putExtra("return-data", true);

  88.         startActivityForResult(intent, CROP_REQUEST_CODE);

  89.     }


  90.     @Override

  91.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  92.         if(requestCode == CAMERA_REQUEST_CODE)

  93.         {

  94.             if(data == null)

  95.             {

  96.                 return;

  97.             }

  98.             else

  99.             {

  100.                 Bundle extras = data.getExtras();

  101.                 if(extras != null)

  102.                 {

  103.                     Bitmap bm = extras.getParcelable("data");

  104.                     Uri uri = saveBitmap(bm);

  105.                     startImageZoom(uri);

  106.                 }

  107.             }

  108.         }

  109.         else if(requestCode == GALLERY_REQUEST_CODE)

  110.         {

  111.             if(data == null)

  112.             {

  113.                 return;

  114.             }

  115.             Uri uri;

  116.             uri = data.getData();

  117.             Uri fileUri = convertUri(uri);

  118.             startImageZoom(fileUri);

  119.         }

  120.         else if(requestCode == CROP_REQUEST_CODE)

  121.         {

  122.             if(data == null)

  123.             {

  124.                 return;

  125.             }

  126.             Bundle extras = data.getExtras();

  127.             if(extras == null){

  128.                 return;

  129.             }

  130.             Bitmap bm = extras.getParcelable("data");

  131.             ImageView imageView = (ImageView)findViewById(R.id.imageView);

  132.             imageView.setImageBitmap(bm);

  133.           sendImage(bm);

  134.         }

  135.     }


  136. //    

  137. //    向服务器传入图像

  138.     private void sendImage(Bitmap bm)

  139.     {

  140.         ByteArrayOutputStream stream = new ByteArrayOutputStream();

  141.         bm.compress(Bitmap.CompressFormat.PNG, 60, stream);

  142.         byte[] bytes = stream.toByteArray();

  143.         String img = new String(Base64.encodeToString(bytes, Base64.DEFAULT));


  144.         AsyncHttpClient client = new AsyncHttpClient();

  145.         RequestParams params = new RequestParams();

  146.         params.add("img", img);

  147.         client.post("http://192.168.56.1/ImgUpload.php", params, new AsyncHttpResponseHandler() {

  148.             @Override

  149.             public void onSuccess(int i, Header[] headers, byte[] bytes) {

  150.                 Toast.makeText(MainActivity.this, "Upload Success!", Toast.LENGTH_LONG).show();


  151.             }


  152.             @Override

  153.             public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

  154.                 Toast.makeText(MainActivity.this, "Upload Fail!", Toast.LENGTH_LONG).show();

  155.             }

  156.         });

  157.     }



  158.     

  159.     @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") private  boolean checkCameraFacing( int facing) {

  160.         if (getSdkVersion() < Build.VERSION_CODES.GINGERBREAD) {

  161.             return false;

  162.         }

  163.         final int cameraCount = Camera.getNumberOfCameras();

  164.         CameraInfo info = new CameraInfo();

  165.         for (int i = 0; i < cameraCount; i++) {

  166.             Camera.getCameraInfo(i, info);

  167.             if (facing == info.facing) {

  168.                 return true;

  169.             }

  170.         }

  171.         return false;

  172.     }

  173.     public  boolean hasBackFacingCamera() {

  174.         final int CAMERA_FACING_BACK = 0;

  175.         return checkCameraFacing(CAMERA_FACING_BACK);

  176.     }

  177.     public  boolean hasFrontFacingCamera() {

  178.         final int CAMERA_FACING_BACK = 1;

  179.         return checkCameraFacing(CAMERA_FACING_BACK);

  180.     }

  181.     public static int getSdkVersion() {

  182.         return android.os.Build.VERSION.SDK_INT;

  183.     }


  184. }


相应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=".MainActivity" >


    <ImageView

        android:id="@+id/imageView"

        android:layout_width="300px"

        android:layout_height="300px"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true" />


    <Button

        android:id="@+id/btn_camera"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:text="摄像头" />


    <Button

        android:id="@+id/btn_gallery"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@+id/btn_camera"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="41dp"

        android:text="图库" />


</RelativeLayout>



© 著作权归作者所有

上一篇: swift 1.2 升级
下一篇: swift Http 的使用
我是IT码农
粉丝 6
博文 66
码字总数 29699
作品 0
成都
程序员
私信 提问
从上传头像 看用户行为 合理设置 头像程序

通过一段时间的发现,有98%的用户选择上传自己的照片,而非调用摄像头直接拍摄。 目标: 1、审核队列 2、不影响原有的用户系统。 3、把不相关的头像删除掉。 流程图:用户上传头像至队列,1...

大灰狼wow
2014/08/24
153
0
【php增删改查实例】第二十五节 - 在main.php中显示头像

在用户成功上传头像以后,用户登录系统,应该能够看到自己的头像,本节演示如何在这个地方: 添加用户头像。 1.用DIV做: border-radius:50% background:url(xxx.jpg) 2.用img标签做: bord...

剽悍一小兔
2018/06/07
0
0
【php增删改查实例】第二十四节 - 文件上传在项目中的具体应用

文件上传在项目中,一般有两个用武之地,分别为设置用户的头像和上传附件。本节我们演示如果进行用户头像的上传。 因为一个用户单独并且唯一对应了一个头像,是一对一的关系,所以我们需要去...

剽悍一小兔
2018/06/07
0
0
WordPress头像不显示及拖慢网站解决办法

一、过去解决办法 之前在Gravatar没有被全面和谐时,可以通过修改wordpress调用头像的服务器解决,现在失效。速度慢,可以通过缓存头像,现在也失效。另外就是关闭头像,不过对于网站需要显示...

Surjur
2015/04/30
585
0
glide等图片缓存框架替换缓存图片解决方案

应用场景: 手机app 用户的头像地址 在服务器上是固定的,比如有些服务器喜欢以 用户手机或者用户id 作为唯一标识,那么用户头像地址看起来是这样的: http://xxx.com/headimage/uid_1233.jp...

谓之王也
2016/11/14
201
0

没有更多内容

加载失败,请刷新页面

加载更多

Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
21分钟前
8
0
cloud-zuul路由网关

九、zuul路由网关 概述 1.1 能干嘛 路由、过滤 路由基本配置 路由访问映射规则 十、springCloud config分布式配置中心

榴莲黑芝麻糊
21分钟前
6
0
Circuit Breaker模式

Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误。该模式可以提高一个应用的稳定性和弹性。 问题 在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源...

mskk
34分钟前
11
0
写论文之前的准备都有哪些?干货来了!

原文链接:https://www.lwfdy.com/archives/144.html 之前跟大家谈了许多有关于初稿修改以及写作事项需要注意的问题,那么今天我们来说一说,在写之前,我们需要做哪些准备呢,为了做到下笔如...

辅导员
40分钟前
9
0
idea快捷键

Alt + Enter 引入类 Ctrl + O 查看我们继承的类或者接口中的方法,以及我们要实现的方法 Ctrl + Alt + b 查看接口实现类中方法(就是我们使用接口编程时,在调用实现类方法处直接Ctrl+鼠标左...

行者终成事
48分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部