从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器

调用相机拍照获取图片:

跳转到到拍照界面:

Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

//下面这句指定调用相机拍照后的照片存储的路径

mSzImageFileName = Long.toString(System.currentTimeMillis()) + ".png";

takeIntent.putExtra(MediaStore.EXTRA_OUTPUT,

Uri.fromFile(new File(Environment.getExternalStorageDirectory(), mSzImageFileName)));

startActivityForResult(takeIntent, REQUEST_TAKE_PHOTO);

从相册获取图片:

从相册选择图片:

Intent pickIntent = new Intent(Intent.ACTION_PICK, null);

// 如果要限制上传到服务器的图片类型时可以直接写如:image/jpeg 、 image/png等的类型

pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");

startActivityForResult(pickIntent, REQUEST_PICK_PHOTO);

从相册返回一张图片或者拍照返回一张图片:

监听返回结果:

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode) {

case REQUEST_PICK_PHOTO:// 直接从相册获取

try {

startPhotoZoom(data.getData());//跳转到截图界面

} catch (NullPointerException e) {

e.printStackTrace();// 用户点击取消操作

}

break;

case REQUEST_TAKE_PHOTO:// 调用相机拍照

mHandler.postDelayed(new Runnable() {

@Override

public void run() {

File temp = new File(Environment.getExternalStorageDirectory(), mSzImageFileName);

if (temp.exists()) {

startPhotoZoom(Uri.fromFile(temp));//跳转到截图界面

}

}

}, 1000);

break;

case REQUEST_CUT_PHOTO:// 取得裁剪后的图片

if (data != null) {

setPicToView(data);//保存和上传图片

}

break;

}

super.onActivityResult(requestCode, resultCode, data);

}

返回图片后进行裁剪:

裁剪图片:

/**

* 裁剪图片方法实现

*/

private void startPhotoZoom(Uri uri) {

LogUtil.e("PersonalInformationActivity", "onActivityResult uri" + uri);

if (uri != null) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "image/*");

// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX outputY 是裁剪图片宽高

intent.putExtra("outputX", 300);

intent.putExtra("outputY", 300);

intent.putExtra("return-data", true);

startActivityForResult(intent, REQUEST_CUT_PHOTO);

}

}

裁剪后保存和上传图片:

/**

* 保存裁剪之后的图片数据

*

* @param picdata

*/

private void setPicToView(Intent picdata) {

Bundle extras = picdata.getExtras();

if (extras != null) {

// 取得SDCard图片路径做显示

Bitmap photo = extras.getParcelable("data");

mSzImageFileName = Long.toString(System.currentTimeMillis()) + ".png";

mImgUrlPath = Environment.getExternalStorageDirectory() + File.separator + "cut_image" + File.separator + mSzImageFileName;

try {

NetUtil.saveBitmapToFile(photo, mImgUrlPath);

} catch (IOException e) {

e.printStackTrace();

}

// 新线程后台上传服务端

new Thread(uploadImageRunnable).start();

}

}

上传图片的线程:

Runnable uploadImageRunnable = new Runnable() {

@Override

public void run() {

Map<String, String> params = new HashMap<>();

params.put("mid", mSzId);//上传参数

Map<String, File> files = new HashMap<>();

files.put("myUpload", new File(mImgUrlPath));//上传文件路径

try {

String json = NetUtil.uploadFile(Constants.URL_EDIT_IMG, params, files);

//json为服务器返回的数据,可自己解析(如json解析)取得想要的数据

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

};

保存图片和上传图片的工具类NetUtil :

public class NetUtil {

//上传图片到服务器

public static String uploadFile(String url, Map<String, String> params, Map<String, File> files)

throws IOException {

String tempStr = null;

String BOUNDARY = java.util.UUID.randomUUID().toString();

String PREFIX = "--", LINEND = "\r\n";

String MULTIPART_FROM_DATA = "multipart/form-data";

String CHARSET = "UTF-8";

HttpURLConnection conn = null;

try {

URL uri = new URL(url);

conn = (HttpURLConnection) uri.openConnection();

conn.setReadTimeout(10 * 1000); // 缓存的最长时间

conn.setDoInput(true);// 允许输入

conn.setDoOutput(true);// 允许输出

conn.setUseCaches(false); // 不允许使用缓存

conn.setRequestMethod("POST");

conn.setRequestProperty("connection", "keep-alive");

conn.setRequestProperty("Charsert", "UTF-8");

conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

// 首先组拼文本类型的参数

StringBuilder sb = new StringBuilder();

for (Map.Entry<String, String> entry : params.entrySet()) {

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINEND);

sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);

sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);

sb.append("Content-Transfer-Encoding: 8bit" + LINEND);

sb.append(LINEND);

sb.append(entry.getValue());

sb.append(LINEND);

}

LogUtil.e("NetUtil", "uploadFile sb:" + sb.toString());

DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());

outStream.write(sb.toString().getBytes());

// 发送文件数据

if (files != null)

for (Map.Entry<String, File> file : files.entrySet()) {

StringBuilder sb1 = new StringBuilder();

sb1.append(PREFIX);

sb1.append(BOUNDARY);

sb1.append(LINEND);

sb1.append("Content-Disposition: form-data; name="+file.getKey()+"; filename=\""

+ file.getValue() + "\"" + LINEND);

sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);

sb1.append(LINEND);

LogUtil.e("NetUtil", "uploadFile sb1:" + sb1.toString());

outStream.write(sb1.toString().getBytes());

InputStream is = new FileInputStream(file.getValue());

byte[] buffer = new byte[1024];

int len = 0;

while ((len = is.read(buffer)) != -1) {

outStream.write(buffer, 0, len);

}

is.close();

outStream.write(LINEND.getBytes());

}

// 请求结束标志

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();

outStream.write(end_data);

outStream.flush();

outStream.close();

StringBuilder sb2 = new StringBuilder();

BufferedReader in = new BufferedReader(new InputStreamReader(conn

.getInputStream(), CHARSET));

String inputLine;

while ((inputLine = in.readLine()) != null) {

sb2.append(inputLine);

}

in.close();

tempStr = sb2.toString();

} catch (Exception e) {

} finally {

if (conn != null) {

conn.disconnect();

}

}

return tempStr;

}

/**

* Save Bitmap to a file.保存图片到SD卡。

*

* @param bitmap

* @return error message if the saving is failed. null if the saving is

* successful.

* @throws IOException

*/

public static void saveBitmapToFile(Bitmap bitmap, String _file)

throws IOException {

BufferedOutputStream os = null;

try {

File file = new File(_file);

int end = _file.lastIndexOf(File.separator);

String _filePath = _file.substring(0, end);

File filePath = new File(_filePath);

if (!filePath.exists()) {

filePath.mkdirs();

}

file.createNewFile();

os = new BufferedOutputStream(new FileOutputStream(file));

bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);

} finally {

if (os != null) {

try {

os.close();

} catch (IOException e) {

}

}

}

}

}

时间: 2024-10-06 05:14:28

从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器的相关文章

Android调用相机拍照获取原始照片

Android调用相机拍照,获取原始照片的解决方案如下:注意要有读取文件的权限,需要添加如下的权限:<uses-permission android:name="android.permission.CAMERA" />按钮点击事件: public void click(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//相机捕捉图片的意图 intent.putExtra(Me

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

最近做的一个项目中,有这样一个要求,在浏览器中调用系统的拍照功能或者选择文件,然后将文件上传到服务器,类似修改头像.        简单而言,就是在一个html页面中有这样一段代码 <input class="filePrew" type="file" capture="camera" accept="image/*" name="image"> 刚开始的时候,没有感觉很难的,因为在UC浏览器.

Android 实例讲解添加本地图片和调用系统拍照图片

在项目的开发过程我们离不开图片,而有时候需要调用本地的图片,有时候需要调用拍照图片.同时实现拍照的方法有两种,一种是调用系统拍照功能,另一种是自定义拍照功能.而本博文目前只讲解第一种方法,第二种方法后期在加以讲解. 添加本地图片和调用系统拍照图片主要是通过调用acitivity跳转startActivityForResult(Intent intent, int requestCode)方法和activity返回结果onActivityResult(int requestCode, int re

微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传

1.index.wxml 1 <!--index.wxml--> 2 <button style="margin:30rpx;" bindtap="chooseimage">获取图片</button> 3 <image src="{{tempFilePaths }}" mode="aspecFill" style="width: 100%; height: 450rpx&qu

调用相机拍照和图册中的图片并且对图片进行裁剪

在写Android应用的时候,很多时候需要调用自带的相机拍照或者直接从图库中选取图片并且对图片进行裁剪. 下面就讲述如何实现. 1. 调用相机 (1) 使用Intent调用相机,但是在启动Intent之前要设置一个文件路径,用来存储相机照下来的照片. (2)然后使用startActivityForResult启动Intent. (3)然后在protected void onActivityResult(int requestCode, int resultCode, Intent data)函数

iOS 开发调用相机以及获取相册照片功能

//添加代理方法 @interface MineViewController () <UITableViewDelegate, UITableViewDataSource, PayCellDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIActionSheetDelegate> //定义消息框 UIActionSheet * act =[[UIActionSheet alloc]initWi

微信小程序---选择图片和调用微信拍照

1.实现点击头像按钮实现选择图片或者拍照,将图片重新设置成头像: //index.js //获取应用实例 var app = getApp() Page({ data: { motto: 'Hello World', userInfo: {}, avatarUrl:null }, //事件处理函数 bindViewTap: function() { var that = this // 选择图片和拍照 wx.chooseImage({ count: 1, // 默认9 sizeType: ['o

调用相机,选择图片上传,带预览功能、图片压缩、相机文字设置、

摘要 iOS调用相机,iOS调用相册,保存至应用程序沙盒,高保真压缩图片,并有点击放大预览,再次点击缩回至原大小,带动画效果,附源码下载地址. Xcode版本4.5.1 类库ios6.0 IOS调用相机 图片预览 图片上传 压缩图片 模拟器添加图片 目录[-] 判断是否支持相机,跳转到相机或相册界面 七.保存图片 高保真压缩图片方法 八.实现点击图片预览功能,滑动放大缩小,带动画 ps:模拟器添加图片 源码下载地址: 一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate ? 1

iOS UIPickerController 调用相机,选择图片上传,带预览功能

在.h中加入delegate @interface ViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate> //实现按钮事件 -(IBAction)chooseImage:(id)sender { UIActionSheet *sheet; <p> // 判断是否支持相机 </p> if(