android 选取本地视频或图片(示例)

近期做的留言板功能,有从本地选取图片或视频发送到留言板的功能:
点击主页面的图片按钮:
case R.id.ll_pic:
    if (!PermissionHelper.checkPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)) {
        ToastUtils.showShort(mContext, String.format(getString(R.string.permission_help_text), getString(R.string.per_storage)));
        return;
    }

    Intent intentPic = new Intent(
            Intent.ACTION_GET_CONTENT);
    intentPic.addCategory(Intent.CATEGORY_OPENABLE);
    intentPic.setType("video/*;image/*");
    startActivityForResult(intentPic,
            RESULT_LOAD_IMAGE);
    break;
 
选中图片或视频之后的接收处理:视频只支持1分钟以下的mp4文件
 
@Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case RESULT_LOAD_IMAGE://从图库选择照片返回的路径  try { String filePath = null; Uri originalUri = data.getData(); int size = 0; if (originalUri.toString().startsWith("file://")) { filePath = originalUri.getPath(); camerPath = filePath; if (!filePath.endsWith(".jpg") && !filePath.endsWith(".png") && !filePath.endsWith(".jpeg") && !filePath.endsWith(".mp4")) { Toast.makeText(MainMessageBoard.this,"不支持该格式",Toast.LENGTH_SHORT).show(); return; } } else { // String[] projection = {MediaStore.Images.Media.DATA}; // Cursor cursor = getContentResolver().query(originalUri, // projection, null, null, null); // int column_index = cursor // .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); // cursor.moveToFirst(); // filePath = cursor.getString(column_index);  Cursor cursor = getContentResolver().query(originalUri, null, null, null, null); cursor.moveToFirst(); LogUtil.d(TAG, "" + cursor.getString(0) + "," + cursor.getString(1) + "," + cursor.getString(2)); filePath = cursor.getString(1); camerPath = filePath; if (camerPath.endsWith(".mp4")) { // size = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));  size = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media.DURATION)); } if (filePath == null) { //android 4.4取最近使用的图片   String wholeID = DocumentsContract .getDocumentId(originalUri); String id = wholeID.split(":")[1]; String[] column = {MediaStore.Images.Media.DATA}; String sel = MediaStore.Images.Media._ID + "=?"; cursor = getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null); int columnIndex = cursor.getColumnIndex(column[0]); if (cursor.moveToFirst()) { filePath = cursor.getString(columnIndex); camerPath = filePath; } cursor.close(); } } // Uri uri = Uri.fromFile(new File(filePath)); // startPhotoZoom(uri);  if (camerPath.endsWith(".mp4")) {  size = Integer.valueOf(MsgUtil.getDuration(camerPath)); String videoArray[] = camerPath.split("/"); videoname = videoArray[videoArray.length - 1]; msgType = 3; if (size <= 60 * 1000) { head_img_name = System.currentTimeMillis() + ".jpg"; MsgUtil.saveFile(MsgUtil.getVideoThumbnail(camerPath), head_img_name); thumbnail = MsgUtil.ALBUM_PATH + head_img_name; isMsg = 1;//0可以用于发送文字,图片 语音 1:用于发送视频缩略图 2:用于发送视频文件   insertMsg(); if(!deviceMac.equals("Virtual")){ DialogHelper.showRoundProcessDialog(MainMessageBoard.this,"正在加载中",true); sendFileToAliyun("leaveMsg/" + sdf.format(new Date()) + "/" + head_img_name, thumbnail); } // sendFileToAliyun("leaveMsg/" + sdf.format(new Date()) + "/" + videoname, camerPath); // sendVideoMsg();  } else { Toast.makeText(mContext, "只支持上传1分钟之内的视频", Toast.LENGTH_SHORT).show(); } } else if (camerPath.endsWith(".3gp")) { Toast.makeText(mContext, "只支持mp4格式", Toast.LENGTH_SHORT).show(); } else { String picArray[] = camerPath.split("/"); fileName = picArray[picArray.length - 1]; isMsg = 0;//0可以用于发送文字,图片 语音 1:用于发送视频  msgType = 1; insertMsg(); if(!deviceMac.equals("Virtual")){ DialogHelper.showRoundProcessDialog(MainMessageBoard.this,"正在加载中",true); sendFileToAliyun("leaveMsg/" + sdf.format(new Date()) + "/" + fileName, camerPath); } // sendPicMsg();  } } catch (Exception ex) { ex.printStackTrace(); } break; case 10: if (data != null) { // int da = data.getIntExtra("data",0); // if(da == 1){ // queryMsg(); // }  MsgBoard msgBoard = (MsgBoard) data.getSerializableExtra("data"); if (msgBoardList != null && msgBoardList.size() > 0) { msgBoardList.add(0, msgBoard); } else { msgBoardList = new ArrayList<MsgBoard>(); msgBoardList.add(msgBoard); } newAdapter.setList(msgBoardList); messageList.setAdapter(newAdapter); newAdapter.notifyDataSetChanged(); if (msgBoardList != null && msgBoardList.size() > 0) { noMessageRel.setVisibility(View.GONE); messageList.setVisibility(View.VISIBLE); // refresh_msg.setVisibility(View.VISIBLE);  } else { noMessageRel.setVisibility(View.VISIBLE); messageList.setVisibility(View.GONE); // refresh_msg.setVisibility(View.INVISIBLE);  } MsgBoadDao.insertData(msgBoard); } break; } } else { camerPath = ""; } }
其中
RESULT_LOAD_IMAGE是选中图片或视频后的处理,10是从单独的画板界面返回后的处理,画板界面返回了一个MsgBoard
 
获取视频缩略图和时长的公共方法:
 
package com.haier.uhome.appliance.newVersion.module.messageboard.view; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.media.ExifInterface; import android.media.MediaMetadataRetriever; import android.os.Environment; import com.haier.uhome.application.HaierApp; import com.haier.uhome.common.util.LogUtil; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /**  * Created by wangchm on 2017/1/25 0025.  */ public class MsgUtil { public static String ALBUM_PATH = Environment.getExternalStorageDirectory() + "/download_img/"; //得到视频缩略图  public static Bitmap getVideoThumbnail(String filePath) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(filePath); bitmap = retriever.getFrameAtTime(); } catch(IllegalArgumentException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException e) { e.printStackTrace(); } } return bitmap; } //获取视频时长  public static String getDuration(String path){ String duration; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(path); duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); return duration; } //保存图片到本地  public static void saveFile(Bitmap bm, String imgName) { File dirFile = new File(ALBUM_PATH); if (!dirFile.exists()) { dirFile.mkdir(); } File myFile = new File(ALBUM_PATH + imgName); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); } catch (Exception ex) { ex.printStackTrace(); } } } 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 你可以使用Python的Pillow库来选择本地图片。以下是一个简单的示例代码: ```python from PIL import ImageTk, Image import tkinter as tk from tkinter import filedialog # 创建一个Tkinter窗口 root = tk.Tk() # 隐藏窗口 root.withdraw() # 打开文件选择对话框 file_path = filedialog.askopenfilename() # 打开图片 image = Image.open(file_path) # 显示图片 image.show() ``` 在这个示例代码中,我们使用了Pillow库中的`Image`类来打开并显示本地图片。我们还使用了Tkinter库来创建一个简单的窗口,并使用`filedialog`模块来选择本地图片文件。请注意,此代码仅适用于Python的桌面应用程序开发。 ### 回答2: 在python中,我们可以使用PIL库来选取本地图片。首先,我们需要确保已经安装了PIL库。可以使用以下命令来安装: pip install pillow 在安装完成后,我们可以使用以下代码来选取本地图片: ```python from PIL import Image from tkinter import Tk from tkinter.filedialog import askopenfilename # 创建一个Tkinter窗口 Tk().withdraw() # 弹出文件选择对话框,允许用户选择图片文件 filename = askopenfilename() # 打开选取图片文件 image = Image.open(filename) # 进行后续处理,如显示图片、处理图片等等 image.show() ``` 首先,我们导入了PIL库和Tkinter模块中的Tk和askopenfilename函数。 然后,我们创建了一个Tkinter窗口,并调用withdraw函数来隐藏该窗口,使其不可见。 接下来,我们调用askopenfilename函数弹出文件选择对话框,允许用户选择图片文件,并将选择的图片文件的路径保存到filename变量中。 最后,我们使用Image.open函数打开选取图片文件,并将其赋值给image变量。此时,我们可以对image进行后续处理,如显示图片、处理图片等等。 以上就是使用python选取本地图片的简单方法。 ### 回答3: 在Python中选取本地图片可以使用Pillow库。Pillow是Python Imaging Library(PIL)的一个分支,提供了处理图像的丰富功能。 首先,需要确保安装了Pillow库。可以使用以下命令在命令行中安装Pillow: ``` pip install pillow ``` 接下来,可以使用以下代码选取本地图片: ```python from PIL import Image from tkinter import Tk, filedialog # 创建一个Tkinter窗口 root = Tk() root.withdraw() # 弹出文件选择对话框,选取本地图片 file_path = filedialog.askopenfilename() # 打开选取图片 image = Image.open(file_path) ``` 首先,导入了`Image`类和`Tk`类以及`filedialog`模块。然后,创建了一个`Tk`对象,并隐藏了Tkinter窗口。接下来,使用`filedialog.askopenfilename()`弹出了文件选择对话框,供用户选择本地图片选取图片后,返回的文件路径存储在`file_path`变量中。最后,通过`Image.open()`打开了选取图片。 这样,就可以使用Pillow库选取本地图片了。选取图片后,你可以对其进行各种操作,比如调整大小、剪切、修改颜色等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值