从相册中选择图片进行压缩并用ImageView展示出来

从手机中选择照片这是几乎所有应用的功能之一,主要考虑到一点的就是如果图片太大了,可能会OOM,简单的处理就是对图片进行压缩!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<Button

android:id="@+id/photo_btn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="选择照片" />

<ImageView

android:id="@+id/photo_iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:contentDescription="选择自己相册照片"

android:layout_gravity="center"

android:layout_marginTop="10dp"/>

</LinearLayout>

-----------操作代码--------------

public class PhotoActivity extends Activity {

/**点击选择照片按钮*/

private Button photoBtn;

/**选择后展示照片*/

private ImageView photoIv;

/**请求码*/

private final static int SELECT_PHOTO_CODE = 100;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_photo);

initViews();

initListners();

}

private void initViews() {

photoBtn = (Button) findViewById(R.id.photo_btn);

photoIv = (ImageView) findViewById(R.id.photo_iv);

}

private void initListners() {

photoBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

selectPhotoFromAblum();

}

});

}

/**从相册库中选择图片操作*/

private void selectPhotoFromAblum() {

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

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

startActivityForResult(intent, SELECT_PHOTO_CODE);

}

@Override

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

switch (requestCode) {

case SELECT_PHOTO_CODE:

if (null != data) {

/**取得图片,图片压缩比为4*4*/

Bitmap bm = compressBitmap(null, null, this, data.getData(), 4, false);

photoIv.setImageBitmap(bm);

}

break;

default:

break;

}

super.onActivityResult(requestCode, resultCode, data);

}

/**图片压缩处理,size参数为压缩比,比如size为2,则压缩为1/4**/

private Bitmap compressBitmap(String path, byte[] data, Context context, Uri uri, int size, boolean width) {

Options options = null;

if (size > 0) {

Options info = new Options();

/**如果设置true的时候,decode时候Bitmap返回的为数据将空*/

info.inJustDecodeBounds = false;

decodeBitmap(path, data, context, uri, info);

int dim = info.outWidth;

if (!width) dim = Math.max(dim, info.outHeight);

options = new Options();

/**把图片宽高读取放在Options里*/

options.inSampleSize = size;

}

Bitmap bm = null;

try {

bm = decodeBitmap(path, data, context, uri, options);

}

catch (Exception e) {

e.printStackTrace();

}

return bm;

}

/**把byte数据解析成图片*/

private Bitmap decodeBitmap(String path, byte[] data, Context context, Uri uri, BitmapFactory.Options options) {

Bitmap result = null;

if (path != null) {

result = BitmapFactory.decodeFile(path, options);

}

else if (data != null) {

result = BitmapFactory.decodeByteArray(data, 0, data.length, options);

}

else if (uri != null) {

ContentResolver cr = context.getContentResolver();

InputStream inputStream = null;

try {

inputStream = cr.openInputStream(uri);

result = BitmapFactory.decodeStream(inputStream, null, options);

inputStream.close();

}

catch (Exception e) {

e.printStackTrace();

}

}

return result;

}

}

最后注意权限:

<!--  从SDCard读取数据权限 -->

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

时间: 2024-10-12 05:10:24

从相册中选择图片进行压缩并用ImageView展示出来的相关文章

android 从相册中选择图片并判断图片是否旋转

今天在做图片合成时,首先从相册中选择图片,然后判断该图片是否旋转了,今天就讲下图片是否旋转,直接上代码 /** * 读取照片exif信息中的旋转角度 * * @param path * 照片路径 * @return角度 获取从相册中选中图片的角度 */ public static int readPictureDegree(String path) { if (TextUtils.isEmpty(path)) { return 0; } int degree = 0; try { ExifInt

Android调用系统相册和相机选择图片并显示在imageview中

Android调用系统相册和相机选择图片并显示在imageview中,在系统调用相机拍摄中,直接返回的是经过压缩处理后的图像,当你直接把返还后的图片放在imageview中时 图片就会非常的模糊,所以要经过先存放在sd中,然后在处理并显示.当调用系统相册时,因为Android系统从4.4版本以后系统不再返回真实的uri路径,而是封装过后的uri路径,所以当你写代码时必须注意,4.4是一个分水岭,4.4以上的版本必须就通过解析和相应的处理才能获取到真实的uri路径. 先上程序运行的结果. 这个是调

第三讲 ------- 从系统中选择图片(拍照或从相册中取)

从系统中取图片这个是写安卓非常常见的一个功能,但是很多时候我们每次我们都去写一个还是比较麻烦的. 下面我就介绍我写的一个已经封装好的一个类,先看截图 从截图上看,功能很清晰,点击获取图片按钮,出来一个半透明的界面,具有用相机拍照获取图片和从相册中选择两种途径去获取图片. 看完截图直接上代码 package com.yixuan; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutput

Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切

效果: 注意:1:网络权限<uses-permission android:name="android.permission.INTERNET"></uses-permission>2:我封装了一个OKHttp,需要在build.gradle 中加入compile 'com.squareup.okhttp3:logging-interceptor:3.4.2' 在同步一在3:用SharedPreferences 保存和获取图片了,将图片和字符串进行了转换4: 可

新浪微博客户端(39)-从图库或相机中选择图片

DJComposeViewController.m #pragma mark - DJComposeToolbar 代理方法 - (void)composeToolbar:(DJComposeToolbar *)toolbar didClickBtnType:(DJComposeToolbarBtnType)btnType { switch (btnType) { case DJComposeToolbarBtnTypeCamera: [self openCameraSurface]; brea

swift -从相册中选择照片并上传

选择本地图片并上传是应用开发中一个比较常见的功能.     原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html 我们使用 UIImagePickerController 可以很方便的从系统"照片"中选择图片,但我们会发现选择完毕后,通过图片的 info[UIImagePickerControllerReferenceURL] 得到的是一个引用路径,格式如下: 1 assets-

[小记]获取相机或者相册中的图片,并且塞入ImageView中

获取相机或者相册中的图片,并且塞入ImageView中 跳转相机 一句代码的事情 startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 0); 跳转相册并且裁剪,要是不想裁剪 把裁剪的代码去掉即可 Intent intent = new Intent( Intent.ACTION_GET_CONTENT); intent.putExtra("return-data", true); intent.setT

Android从相册中获取图片以及路径

首先是相册图片的获取: private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0;   //这里的IMAGE_CODE是自己任意定义的 //使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.set

手机中的图片怎么压缩大小?

手机中的图片怎么压缩大小?我们的手机中都会保存很多的图片,这些图片有些会很大,怎么将手机中的图片压缩变小呢,下面小编就给大家分享一个将手机中的图片压缩变小的简单方法.第一种方法:在线压缩1:(首先需要将手机上的图片传到电脑上,借助电脑上的压缩工具进行压缩)打开在线图片压缩的网站,点击在线图片压缩下的立即使用按钮.2:添加要进行压缩的图片,点击或者拖拽将其添加进来.3:最后点击开始压缩的按钮就可以实现对添加的图片的压缩. 第二种方法:使用迅捷压缩软件1:打开这个图片压缩的软件,页面中有三个功能可以