Android圖片Base64加密+文字上傳
商城專案圖片需要加密上傳,先看下介面:
介面圖如下:
1.兩個介面(加密和上傳介面):
@FormUrlEncoded
@POST("XXX")/**新增商品圖片(base64格式)*/
Flowable<AddGoodsBean> addGoodsImg(@Field("img") String img, @Field("shopid") String shopid, @Field("uid") String uid);
@FormUrlEncoded
@POST("XXX")/**新增商品介面*/
Flowable<CommonBean> addShopping(@Field("uid") String uid,@Field("shopid") String shopid,@Field("name")String name,
@Field("typeid") String typeid,@Field("count") String count,@Field("cost") String cost,@Field("goods_type") String goods_type,
@Field("img") String img);
2.從相簿選擇圖片,這裡我用的是第三方框架 PhotoPicker,注意許可權別忘記加了
iv_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PhotoPicker.builder()
.setPhotoCount(1)
.setShowCamera(false)
.setShowGif(false)
.setPreviewEnabled(false)
.start(TemporaryDishActivity.this, PhotoPicker.REQUEST_CODE);
}
});
3.由於是單張圖片,所以得到的集合直接取第一個就行
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == PhotoPicker.REQUEST_CODE) {
if (data != null) {
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200,
TemporaryDishActivity.this.getResources().getDisplayMetrics());
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200f,
TemporaryDishActivity.this.getResources().getDisplayMetrics());
ArrayList<String> photos =
data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
img = photos.get(0);
//base64加密圖片上傳
String s = ImageUtils.bitmapToString(img);
mPresenter.addGoodImg(s, String.valueOf(shopid), String.valueOf(uid));
Log.d("lwp", "s:" + s.toString() + " ;img:" + img.toString());
iv_add.setImageBitmap(BitmapFactory.decodeFile(img));
}
}
}
4.工具類:
public class ImageUtils {
// 根據路徑獲得圖片並壓縮,返回bitmap用於顯示
public static Bitmap getSmallBitmap(String filePath) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, 480, 800);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath, options);
}
//計算圖片的縮放值
public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
//把bitmap轉換成String
public static String bitmapToString(String filePath) {
Bitmap bm = getSmallBitmap(filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//1.5M的壓縮後在100Kb以內,測試得值,壓縮後的大小=94486位元組,壓縮後的大小=74473位元組
//這裡的JPEG 如果換成PNG,那麼壓縮的就有600kB這樣
bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
byte[] b = baos.toByteArray();
Log.d("d", "壓縮後的大小=" + b.length);
return Base64.encodeToString(b, Base64.DEFAULT);
}
}
5.最後上傳成功後結束當前頁面,並且傳送一個Eventbus黏性事件讓之前的頁面重新整理資料
@Override
public void onAddGoodsSuccess() {
// showTip("上傳成功");
EventBus.getDefault().postSticky(new AddTemoporaryDishEvent(true));
finish();
}
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
public void onAddEvent(AddTemoporaryDishEvent event){
if (event.getAdd()){
mPresenter = new ProductsPresenter(this);
mPresenter.get_goodstype(String.valueOf(MyApplication.getInstance().shopid));
showLoadingDialog();
}
}
下面的程式碼和主題就扯遠了.
相關文章
- VueQuillEditor富文字上傳圖片-非base64VueUI
- JS base64 圖片上傳JS
- 上傳圖片生成base64
- Android 使用Base64編碼圖片後上傳伺服器的原理Android伺服器
- 通過圖片地址,將圖片處理成base64,使用ajax上傳圖片
- vue+element 將圖片壓縮並轉換成base64上傳圖片Vue
- element上傳圖片元件使用方法|圖片回顯|格式轉換base64元件
- Android本地圖片上傳(拍照+相簿)Android地圖
- 前端實現圖片上傳預覽並轉換base64前端
- 日常筆記三:將base64的圖片上傳到本地筆記
- base64 編碼轉圖片儲存本地和上傳 oss
- 上傳圖片
- android選擇圖片或拍照圖片上傳到伺服器(包括上傳引數)Android伺服器
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- 【easyui 】上傳圖片UI
- 上傳圖片jsJS
- 圖片上傳及圖片處理
- [BUG反饋]使用base64上傳圖片,php://input裡沒有值PHP
- ie8上傳本地圖片檔案轉base64 並預覽地圖
- Android圖片上傳(頭像裁切+原圖原樣)Android
- Android 中 Base64 轉換成 圖片Android
- android上傳圖片到伺服器(使用base64位元組流的形式通過 AsyncHttpClient框架傳輸)Android伺服器HTTPclient框架
- php圖片上傳之圖片轉換PHP
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- 富文字編輯器Quill(二)上傳圖片與視訊UI
- 多圖片formpost上傳ORM
- input file圖片上傳
- PHP上傳圖片類PHP
- 圖片檔案上傳
- 測試圖片上傳
- Android如何壓縮圖片上傳服務端Android服務端
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- Android上傳圖片之呼叫系統拍照和從相簿選擇圖片Android
- Android壓縮圖片後再上傳圖片Android
- vue 上傳圖片進行壓縮圖片Vue
- Ueditor 上傳圖片自動新增水印(只能上傳圖片,上傳檔案報錯)
- 學姐,影片上傳不了,我上傳了圖片
- Android圖片上傳到阿里雲OSS小案例Android阿里