CAMERE

package com.example.cameraphoto5k;

import java.io.File;
import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {
    private static final String TAG = "MainActivity";
    private static final int FLAG_CAMERA_REQUEST = 100;
    private static final int FLAG_ALUMB_REQUEST = 101;
    private static final int FLAG_CROP_REQUEST = 102;

    private Button btnTake;
    private Button btnChoose;
    private ImageView imgLogo;
    private Intent intent;
    private File imgRoot;
    private Uri uri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 说明外置存储可用,已经被挂载
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            // SD卡根目录
            File rootSD = Environment.getExternalStorageDirectory();
            imgRoot = new File(rootSD.getAbsolutePath() + File.separator + "imgs");

            if (!imgRoot.exists()) {
                imgRoot.mkdirs();
            }
        }

        btnTake = (Button) findViewById(R.id.btn_take_photo);
        btnChoose = (Button) findViewById(R.id.btn_choose_alumb);
        imgLogo = (ImageView) findViewById(R.id.img_logo);

        btnTake.setOnClickListener(this);
        btnChoose.setOnClickListener(this);

        //
        // 隐式Intent,我们不用去指定要跳转到的Activity,只需要指定一个Action,就可以跳转到相应的页面
        // 这个页面一般是系统给我们指定好的页面
        // Intent intent = new Intent(Intent.ACTION_PICK);
        // // 设置类型 image/jpeg image/png image/gif,*是通配符
        // intent.setType("image/*");
        // startActivity(intent);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_take_photo:
            // /storage/0/emulate/imgs/3243242323.jpg
            File f = new File(imgRoot, new Date().getTime() + ".jpg");
            uri = Uri.fromFile(f);

            // 系统相机的隐式Intent是MediaStore.ACTION_IMAGE_CAPTURE)
            intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            // Uri
            // 拍照输出的路径
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
            startActivityForResult(intent, FLAG_CAMERA_REQUEST);

            break;
        case R.id.btn_choose_alumb:
            intent = new Intent(Intent.ACTION_PICK);
            // 设置类型 image/jpeg image/png image/gif,*是通配符
            intent.setType("image/*");
            startActivityForResult(intent, FLAG_ALUMB_REQUEST);
            break;

        default:
            break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 从系统相机返回的值
        if (requestCode == FLAG_CAMERA_REQUEST) {
//            imgLogo.setImageURI(uri);
            
            intent = crop(uri);
            startActivityForResult(intent, FLAG_CROP_REQUEST);
        } else if (requestCode == FLAG_ALUMB_REQUEST) {
            // 从相册中返回的值
            uri = data.getData();
//            imgLogo.setImageURI(uri);

            intent = crop(uri);
            startActivityForResult(intent, FLAG_CROP_REQUEST);
        } else if (requestCode == FLAG_CROP_REQUEST) {
            // 从返回值中直接获取bitmap
            Bitmap bmp = (Bitmap) data.getExtras().get("data");
            imgLogo.setImageBitmap(bmp);
        }
    }

    /**
     * 裁剪
     * @param uri
     * @return
     */
    private Intent crop(Uri uri) {
        // 隐式Intent,调用系统的裁剪
        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("scale", true); // 支持缩放
        // 裁剪之后保存的路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse(uri.getPath() + ".bak")); // 将裁剪的结果输出到指定的Uri
        // 必须加,否则返回值中找不到返回的值
        intent.putExtra("return-data", true); // 若为true则表示返回数据
        // 可以省略
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());// 裁剪成的图片的格式
        // intent.putExtra("noFaceDetection", true); //启用人脸识别
        return intent;
    }
}

 

 

///

1.apI接口声明

@Multipart

@POST("file/upload")

Call<Bean> upLoad(@Query("uid") String uid, @Part MultipartBody.Part part);

 

2.代码构造 MultipartBody.Part

LoginApi loignApi = RetrofitManager.getDefault().create(LoginApi.class);

//RequestBody封装了文件和文件的类型

RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);

// MultipartBody.Part封装了接受的key和文件名字和RequestBody

MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);

Call<Bean> login = loignApi.upLoad("71", part);

 

3.本地图片资源转换成File

public File getFile() {

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);

    String defaultPath = getApplicationContext().getFilesDir()

            .getAbsolutePath() + "/defaultGoodInfo";

    File file = new File(defaultPath);

    if (!file.exists()) {

        file.mkdirs();

    }

    String defaultImgPath = defaultPath + "/messageImg.jpg";

    file = new File(defaultImgPath);

    try {

        file.createNewFile();

        FileOutputStream fOut = new FileOutputStream(file);

        bitmap.compress(Bitmap.CompressFormat.PNG, 20, fOut);

        fOut.flush();

        fOut.close();

    } catch (Exception e) {

        e.printStackTrace();

    }

    return file;

}

 

 

<Button
        android:id="@+id/btn_take_photo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="拍照上传" />

    <Button
        android:id="@+id/btn_choose_alumb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="从相册选择" />

    <ImageView
        android:id="@+id/img_logo"
        android:layout_width="100dp"
        android:layout_height="100dp" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值