android调用系统照相机保存照片以及压缩上传下载

   1.项目中遇到了许多处理图片的时候、可以直接拿过来使用、很实用。项目中用到了android 开源框架com.loopj.android.http 非常适用方便   
        2.以下是demo是从项目中提出了一点,示例中有完整的注释,一方面为正在学习的朋友一点帮助;另一方面是自己在遇到相似问题的同时能对自己有所帮助
       
        import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.http.Header;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

public class Main extends Activity {
    private Button mButton; // 拍照button
    private ImageView mImageView;// 用于显示照片
    private File mPhotoFile; // 操作文件
    private String fileWebPath = "http://www.baidu.com.?sda&eddd5fsdfdsf5sd41/13-0.jpg";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mButton = (Button) findViewById(R.id.btn_camera);
        mButton.setOnClickListener(new ButtonOnClickListener());
        mImageView = (ImageView) findViewById(R.id.img_uploading_pic);

        // 下载图片
        AsyncHttpClient client = new AsyncHttpClient();
        client.post(fileWebPath, null, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers,
                    byte[] responseBody) {

                mImageView.setImageBitmap(BitmapFactory.decodeByteArray(
                        responseBody, 0, responseBody.length));
            }

            @Override
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {

            }
        });
    }

    private class ButtonOnClickListener implements View.OnClickListener {
        public void onClick(View v) {
            try {
                // 临时文件名
                String temp = getPhotoFileName();
                // 默认在sdcard根目录下 可以自定义目录
                mPhotoFile = new File("sdcard/" + temp);
                // 激活系统照相机
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(mPhotoFile));
                // 必须这样启动 在onActivityResult回调中接收 照片信息
                startActivityForResult(intent, 0);
            } catch (Exception e) {
                Toast.makeText(Main.this, "-->" + e.getMessage(), 0).show();
            }
        }
    }

   
    private String getPhotoFileName() {
        Date date = new Date(System.currentTimeMillis());
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "'IMG'_yyyyMMdd_HHmmss");
        return dateFormat.format(date) + ".jpg";
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 0) {
            try {
                // 设置照片到imageView中
                mImageView.setImageBitmap(convertBitmap(mPhotoFile));

                // 可以在显示图片后 上传照片
                AsyncHttpClient client = new AsyncHttpClient();
                RequestParams params = new RequestParams();
                params.put("file", mPhotoFile);
                client.post("上传路径", params, new AsyncHttpResponseHandler() {

                    @Override
                    public void onSuccess(int statusCode, Header[] headers,
                            byte[] responseBody) {

                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers,
                            byte[] responseBody, Throwable error) {
                    }

                });

            } catch (Exception e) {
            }
        }
    }

   
    private Bitmap convertBitmap(File file) throws IOException {
        Bitmap bitmap = null;
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        FileInputStream fis = new FileInputStream(file.getAbsolutePath());
        BitmapFactory.decodeStream(fis, null, o);
        fis.close();
        final int REQUIRED_SIZE = 100;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 3;
            height_tmp /= 2;
            scale *= 2;
        }
        BitmapFactory.Options op = new BitmapFactory.Options();
        op.inSampleSize = scale;
        fis = new FileInputStream(file.getAbsolutePath());
        bitmap = BitmapFactory.decodeStream(fis, null, op);
        fis.close();
        // 保存压缩图片 替换临时图片
        FileOutputStream out = new FileOutputStream(file);
        if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
            out.flush();
            out.close();
        }
        return bitmap;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值