上传本地图片到服务器详解
通过思路实现上传服务器逻辑
思路
回调图片path并解码为bitmap
将得到的bitmap通过base64格式转化为字符串
通过服务器对应接口get/post 参数携带其字符串
实现
回调解码
bitmap为解码位图 imgPath为回调path
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| private String imgPath; private Bitmap bitmap; public void loadImage() { //调用相册中选择图片 Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(galleryIntent, RESULT_LOAD_IMG); } //返回被选择图片结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; // 获取游标 Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); imgPath = cursor.getString(columnIndex); cursor.close(); imXsFirstImage.setVisibility(View.VISIBLE); bitmap = BitmapFactory.decodeFile(imgPath); imXsFirstImage.setImageBitmap(bitmap); } else { L.t(getResources().getString(R.string.You_havenot_picked_Image)); } } catch (Exception e) { L.t(getResources().getString(R.string.Something_went_wrong)); } }
|
bitmap与base64互转
位图转为字符串
1 2 3 4 5 6 7 8 9 10 11 12
| /** * 将bitmap转为base64字符串 * @param bitmap bitmap位图 * @param quality 80表示压缩掉20% * @return base64字符串 */ public String TurnBitmapBase(Bitmap bitmap) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos); byte[] bytes = bos.toByteArray(); return Base64.encodeToString(bytes, Base64.DEFAULT); }
|
字符串转为位图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| /** * 将base64字符串转为bitmap位图 * @param base_bitmap 服务端回调base64字符串 * @return bitmap位图 */ public Bitmap TurnBaseBitmap(String base_bitmap) { byte[] byteIcon = Base64.decode(base_bitmap, Base64.DEFAULT); for (int i = 0; i < byteIcon.length; ++i) { if (byteIcon[i] < 0) { byteIcon[i] += 256; } } Bitmap bitmap = BitmapFactory.decodeByteArray(byteIcon, 0, byteIcon.length); return bitmap; }
|
字符串转为位图: 运用于通过服务器接口将其获取到的值通过其进行转码为位图 便于显示
位图转为字符串: 运用于将其数据通过接口传值(我这边用的是数据库表存 方便上传之后 客户端还可以显示其内容)