LuBan图片压缩+ImageSelector实现仿微信9张图片选择或者无限图片批量选择压缩
LuBan图片压缩实现9图上传Bmob云数据库
·
LuBan图片压缩+ImageSelector实现9张图片或者无限图片批量选择压缩
关于ImageSelector我就放一张原作者的图片上来
源码:https://github.com/donkingliang/ImageSelector
然后就是我的源代码地址已上传github:
https://github.com/307572384/ImageSelector-masteraddLuban
下面是我用9图选择+Luban实现批量图片压缩的效果图
前言:我遇到一些问题就是Luban的图片批量压缩怎么压缩,imageSelector选择到的图片地址我已经获取到了是一个Arraylist的集合封装然后我去找了一下有没什么案例结果找到了一个然后最终实现的时候我发现一个问题,就是那个一直在循环压缩不断出图,然后我从Luban那个开源的地址的源代码研究出来了,就是直接给本地也加上一个Arraylist然后就可以获取到相应的Arraylist集合存储的文件然后进行压缩。这个用的是最新版本的鲁班就ok了。下面我们来看代码
开头+一个Arraylist
private void y_Luban(final ArrayList<String> images) {
Luban.with(mContext)
.load(images)
.setTargetDir(getPath())
.ignoreBy(100)
.setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
}
@Override
public void onSuccess(File file) {
mAdapter.refresh(images);//将图片更新到recyview上面去
}
@Override
public void onError(Throwable e) {
}
}).launch();
}
存储地址不用改成Arraylist 直接这样用就可以了
//存放鲁班压缩完后的图片你可以不写但是为了看效果所以就先这么写着
private String getPath() {
String path = Environment.getExternalStorageDirectory() + "/Luban/image/";
File file = new File(path);
if (file.mkdirs()) {
return path;
}
return path;
}
然后我们来看一下完整的代码
MainActivity
package com.donkingliang.imageselectdemo;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.donkingliang.imageselectdemo.adapter.ImageAdapter;
import com.donkingliang.imageselector.utils.ImageSelector;
import java.io.File;
import java.util.ArrayList;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final int REQUEST_CODE = 0x00000011;
private ArrayList<String> mImages;//用于存放图片的地址
private Context mContext = this;
private RecyclerView rvImage;
private ImageAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvImage = findViewById(R.id.rv_image);
rvImage.setLayoutManager(new GridLayoutManager(this, 3));
mAdapter = new ImageAdapter(this);
rvImage.setAdapter(mAdapter);
findViewById(R.id.btn_single).setOnClickListener(this);
findViewById(R.id.btn_limit).setOnClickListener(this);
findViewById(R.id.btn_unlimited).setOnClickListener(this);
findViewById(R.id.btn_clip).setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && data != null) {
ArrayList<String> images = data.getStringArrayListExtra(ImageSelector.SELECT_RESULT);//使用Arraylist存储选择到的图片路径
boolean isCameraImage = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false);
// Log.d("ImageSelector", "是否是拍照图片:" + isCameraImage);
// mAdapter.refresh(images);
y_Luban(images);
}
}
//存放鲁班压缩完后的图片你可以不写但是为了看效果所以就先这么写着
private String getPath() {
String path = Environment.getExternalStorageDirectory() + "/Luban/image/";
File file = new File(path);
if (file.mkdirs()) {
return path;
}
return path;
}
private void y_Luban(final ArrayList<String> images) {
Luban.with(mContext)
.load(images)
.setTargetDir(getPath())
.ignoreBy(100)
.setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
}
@Override
public void onSuccess(File file) {
mAdapter.refresh(images);//将图片更新到recyview上面去
}
@Override
public void onError(Throwable e) {
}
}).launch();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_single:
//单选
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, true, 0);
ImageSelector.builder()
.useCamera(true) // 设置是否使用拍照
.setSingle(true) //设置是否单选
.setViewImage(true) //是否点击放大图片查看,,默认为true
.start(this, REQUEST_CODE); // 打开相册
break;
case R.id.btn_limit:
//多选(最多9张)
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 9);
// ImageSelector.builder().setSingle(true).start(this,REQUEST_CODE);
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 9, mAdapter.getImages()); // 把已选的传入。
ImageSelector.builder()
.useCamera(true) // 设置是否使用拍照
.setSingle(false) //设置是否单选
.setViewImage(true) //是否点击放大图片查看,,默认为true
.setMaxSelectCount(9) // 图片的最大选择数量,小于等于0时,不限数量。
.start(this, REQUEST_CODE); // 打开相册
break;
case R.id.btn_unlimited:
//多选(不限数量)
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE);
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, mAdapter.getImages()); // 把已选的传入。
//或者
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 0);
// ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 0, mAdapter.getImages()); // 把已选的传入。
ImageSelector.builder()
.useCamera(true) // 设置是否使用拍照
.setSingle(false) //设置是否单选
.setViewImage(true) //是否点击放大图片查看,,默认为true
.setMaxSelectCount(0) // 图片的最大选择数量,小于等于0时,不限数量。
.start(this, REQUEST_CODE); // 打开相册
break;
case R.id.btn_clip:
//单选并剪裁
// ImageSelectorUtils.openPhotoAndClip(MainActivity.this, REQUEST_CODE);
ImageSelector.builder()
.useCamera(true) // 设置是否使用拍照
.setCrop(true) // 设置是否使用图片剪切功能。
.setSingle(true) //设置是否单选
.setViewImage(true) //是否点击放大图片查看,,默认为true
.start(this, REQUEST_CODE); // 打开相册
break;
}
}
}
ImageAdapter
package com.donkingliang.imageselectdemo.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.donkingliang.imageselectdemo.R;
import java.io.File;
import java.util.ArrayList;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
private Context mContext;
private ArrayList<String> mImages;
private LayoutInflater mInflater;
public ImageAdapter(Context context) {
mContext = context;
this.mInflater = LayoutInflater.from(mContext);
}
public ArrayList<String> getImages() {
return mImages;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.adapter_image, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final String image = mImages.get(position);
Glide.with(mContext).load(new File(image)).into(holder.ivImage);
}
@Override
public int getItemCount() {
return mImages == null ? 0 : mImages.size();
}
public void refresh(ArrayList<String> images) {
mImages = images;
notifyDataSetChanged();
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView ivImage;
public ViewHolder(View itemView) {
super(itemView);
ivImage = itemView.findViewById(R.id.iv_image);
}
}
}
注意:如果需要用到rxjava可以自行添加照着那个Luban的源代码来就行了
更多推荐
已为社区贡献4条内容
所有评论(0)