1. 程式人生 > >上傳頭像 並裁剪

上傳頭像 並裁剪

Main





public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View {

    @BindView(R.id.btn)
    Button btn;
    @BindView(R.id.tv)
    TextView tv;

    @BindView(R.id.btn02)
    Button btn02;
    private TimePickerView pickerView;
    private PopupWindow popupWindow;
    private TextView camera;
    private TextView pick;
    private TextView cancel;


/**********************************************************************************

    private String path = Environment.getExternalStorageDirectory() + "/photo.png";

    @Override
    public void setupActivityComponent(@NonNull AppComponent appComponent) {
        DaggerMainComponent //如找不到該類,請編譯一下專案
                .builder()
                .appComponent(appComponent)
                .mainModule(new MainModule(this))
                .build()
                .inject(this);
    }

    @Override
    public int initView(@Nullable Bundle savedInstanceState) {
        return R.layout.activity_main; //如果你不需要框架幫你設定 setContentView(id) 需要自行設定,請返回 0
    }

    @Override
    public void initData(@Nullable Bundle savedInstanceState) {
        //動態新增許可權
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.CAMERA}, 0);
        }
        pickerView = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                tv.setText(getTime(date));
            }
        }).build();
        View inflate = View.inflate(this, R.layout.layout_pop, null);
        popupWindow = new PopupWindow(inflate, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        popupWindow.setOutsideTouchable(true);

        camera = inflate.findViewById(R.id.tv_camera_popup);
        pick = inflate.findViewById(R.id.tv_pick_popup);
        cancel = inflate.findViewById(R.id.tv_cancel_popup);

        //相機
        camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //開啟相機
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //將圖片放到SD card
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
                startActivityForResult(intent, 888);
                popupWindow.dismiss();
            }
        });
        //相簿
        pick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //開啟相簿
                Intent intent = new Intent(Intent.ACTION_PICK);
                //設定圖片格式
                intent.setType("image/*");
                startActivityForResult(intent, 999);
                popupWindow.dismiss();
            }
        });
        //取消
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 999 && resultCode == MainActivity.RESULT_OK) {
            Uri uri = data.getData();
            crop(uri);//這個方法在下面
        }
         else if (requestCode == 888 && resultCode == MainActivity.RESULT_OK) {
            Uri uri = Uri.fromFile(new File(path));
            crop(uri);
        } 
         else if (requestCode == 1000 && resultCode == MainActivity.RESULT_OK) {
            //傳到自己的控制元件上
            //Bitmap bitmap = data.getParcelableExtra("data");
            //imageView.setImageBitmap(bitmap);
              //上傳到網路
             Uri uri = Uri.fromFile(new File(path));

           // ChangeFileFormat 是一個類 看另一篇部落格 自己去複製吧 聯絡我也可以 我給你發文件

            File file1 = ChangeFileFormat.getFileByUri(uri, this);

            //RequestBody封裝了檔案和檔案的型別
        RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file1);
          
            // MultipartBody.Part封裝了接受的key和檔名字和RequestBody
            MultipartBody.Part part = MultipartBody.Part.createFormData("file",file1.getName(), requestBody);

            //調P層
             mPresenter.getData(part);
        }
    }

    private void crop(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", true);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 300);
        intent.putExtra("outputY", 300);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, 1000);
    }

    @OnClick({R.id.btn, R.id.btn02})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            
            case R.id.btn02:

                popupWindow.showAtLocation(btn, Gravity.BOTTOM, 0, 0);
                break;
        }
    }

    @Override
    public void responseMsg(bean bean) {
        String msg = bean.getMsg();
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();

    }
}
@Multipart
@POST("file/upload")
Observable<bean> uploadPhoto(@Query("uid") String uid, @Part MultipartBody.Part part)

P層

 public void getData(MultipartBody.Part part){
        Observable<bean> observable = mModel.requestData(part);


                observable.subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<bean>() {
                            @Override
                            public void accept(bean bean) throws Exception {
                                mRootView.responseMsg(bean);
                            }
                        });
            }

m層

 InfoService infoService = mRepositoryManager.obtainRetrofitService(InfoService.class);
        Observable<bean> beanObservable = infoService.uploadPhoto("20473", data);
        return beanObservable;

相關推薦

頭像 裁剪

Main public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View { @BindView(R.id.btn)

移動端 頭像 裁剪功能(h5)

charset 移動端 error max cli alert initial port round <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta

django 頭像預覽 3選1

email middle cit for bin utf files ajax 圖片地址 註冊頁面的頭像上傳 register.html<!DOCTYPE html> 1 <html lang="en"> 2 <head> 3

PC端頭像裁剪功能

  基於vue框架 藉助elementUI框架做為上傳元件 藉助vue-cropper做為裁剪工具 話不多說,先看效果: 上傳頭像元件: <div class="app-head"> <h3>小程式頭像<

Retrofit頭像給該請求body新增引數---500 Internal Server Error

網路框架用的是retrofit,在引數配置方面,的確是行雲流水,屢試不爽······前提你很熟悉啊。 上傳頭像給後臺: 正常情況下(POST請求) //接口裡正常定義 @Multipart @POST("user/uploadAvatar") Observable

cropper.js 移動端圖片 裁剪 的功能實現

定好頁面  效果如圖 要求 點選 + 號之後  上傳圖片  裁剪之後 放在頁面上 實現 依賴  remodal 和 cropper.js  把裁剪的內容 放在remodal裡  點選 +

django 使用者註冊時使用modelform頭像顯示在頁面

在寫使用者註冊時,除了新增使用者名稱,密碼,暱稱,郵箱等,再新增使用modelform上傳頭像的功能,並且在登入(django已經為我們寫好了登入功能的全部程式碼)之後頭像顯示在頁面1.伺服器端安裝pillowpip install pillow2.新增圖片欄位到使用者mod

apicloud 頭像或圖片預覽

點選頭像自動上傳 <div class="head" tapmode onclick="showAction()"><img id="img_src" src="../image/preview.jpg"/></div> // 點選

HTML5 本地裁剪圖片至伺服器 canvas圖片 canvas圖片裁剪

很多情況下使用者上傳的圖片都需要經過裁剪,比如頭像啊什麼的。但以前實現這類需求都很複雜,往往需要先把圖片上傳到伺服器,然後返回給使用者,讓使用者確定裁剪座標,傳送給伺服器,伺服器裁剪完再返回給使用者,來回需要 5 步。步驟繁瑣不說,當很多使用者上傳圖片的時候也很影響伺服器

呼叫系統相機、相簿、剪裁圖片(常用於頭像,相容Android7.0)

轉載請註明出處文章地址 本文轉自Hansion的部落格 由於在Android 7.0 採用了StrictMode API政策禁,其中有一條限制就是對目錄訪問的限制。 這項變更意味著我們無法通過File API訪問手機儲存上的資料,也就是說,給其他應用傳

利用js實現無重新整理頭像(或檔案)顯示進度條

無重新整理上傳原理:現在我們利用新技術FormData表單資料物件可以實現快速收集表單資訊,普通表單域 和 上傳檔案域 均可以收集,再結合ajax就可以實現無重新整理上傳。 那麼怎樣顯示進度條呢?原來ajax物件有upload成員,該成員也是物件,構造器是XMLHttpR

python基礎----socketserver多發實現、FTP

span end 沒有 res hasattr ret net packet except 一、socketserver多並發 基於tcp的套接字,關

基於VUE選擇圖片在頁面顯示(圖片可刪除)

.ajax sta http data .cn 數據 file prim 生成 demo例子: 依賴文件 : http://files.cnblogs.com/files/zhengweijie/jquery.form.rar HTML文本內容:

WebForm實現文件預覽

image form ict itl lec nbsp style object 是否 實現效果: 頁面代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inh

PHP.25-TP框架商城應用實例-後臺1-添加商品功能、鉤子函數、在線編輯器、過濾XSS、圖片生成縮略圖

引用傳遞 none move 名稱 textarea 如果 library time fields 添加商品功能   1、創建商品控制器【C】  /www.test.com/shop/Admin/Controller/GoodsController.class.php

Android Studio第四十期 - 頭像功能支持權限管理

android 服務器 代碼已經整理好,加了權限管理和SP保存上傳服務器的方法,希望能夠幫到大家~效果如下圖: 地址:https://github.com/geeklx/MyApplication/tree/master/p025_upload_img 附:這裏借鑒了翔神(

flask 頭像

file turn col log {} str 文件 and quest 上傳頭像,自己感覺了好久,就是上傳文件唄其實,存在一個路徑,數據庫存儲這個路徑,然後展示給前端,啥都不說,看怎麽實現的。 數據庫設置如下 user_image=db.Column(d

應用生成下載鏈接需要多少錢;安卓市場應用需要什麽

app上傳專業上架蘋果app app上架多少錢聯系QQ:2205357007 上傳應用並生成下載鏈接需要多少錢;安卓市場上傳應用需要什麽上傳應用程序到安卓分發市場時,經常需要填寫一些有關apk安裝包的信息。而作為非技術開發人員的我們同樣需要識記一下這些信息,在下載安裝包、安裝應用到手機時,都是非常有用的。目前

3種圖片實現預覽的方法

load app chunks isp 賦值 response with span attr 在常見的用戶註冊頁面,需要用戶在本地選擇一張圖片作為頭像,並同時預覽。 常見的思路有兩種:一是將圖片上傳至服務器的臨時文件夾中,並返回該圖片的url,然後渲染在html頁面;另一種

selenium實戰 二 進入博客園,圖片發帖

編輯 sendkeys arr accept 圖片 .cn ledir car spa 1 #-*- coding:utf-8 -*- 2 __author__ = "carry" 3 4 from selenium import webdriver 5 im