目录

  • 关于YImagePicker
  • 引入依赖
  • 核心原理
  • 效果图集
  • 点击查看详细API文档
  • 微信图片选择
  • 小红书图片选择
  • 预览
  • 拍照
  • 拍摄视频
  • 调用选择器并剪裁
  • 拍照并剪裁
  • 直接剪裁
  • 提供媒体数据——支持回调相册数据、所有媒体数据、指定相册内媒体数据
    • 获取媒体相册数据
    • 获取全部媒体文件
    • 获取指定相册内全部媒体文件
    • 预加载获取指定相册内全部媒体文件
  • Presenter指定、自定义Item样式、自定义皮肤UI、自定义提示常量、设置选择器调用失败回调、自定义回调类型
  • 版本记录
    • 2.4.6版本 [2019.11.02]
  • 下个版本排期
  • 感谢
  • 心声

关于YImagePicker

  • 支持小红书剪裁样式并自定义UI

  • 支持微信、马蜂窝、知乎等样式定制

  • 支持13种视频图片文件类型混合加载(2.4.4版本加入)

  • 支持大图预览(普通预览+编辑预览),支持超长图、超大图

  • 支持单图自定义比例剪裁

  • 支持单图圆形剪裁,生成png圆形图片(2.4.3版本加入)

  • 支持单图留白剪裁(仿最新微信图片头像选择),支持生成透明背景图(2.4.5版本加入)

  • 小红书剪裁样式支持视频多选和预览

  • 微信样式支持图片和视频文件混合选择或指定类型选择

  • 微信样式支持保存上一次选中的图片状态

  • 微信样式支持屏蔽上一次选中的图片

  • 选择结果直接回调,拒绝配置ActivityForResult+requestCode,即调用即处理

  • 支持选择器调用失败回调(2.4.4版本加入)

  • 支持自定义回调类型(2.4.5版本加入)

  • 轻量级,aar大小不超过300K,无so库,无任何第三方依赖

  • 支持androidx和support

  • 永久维护

  • 支持直接回调媒体相册列表及文件列表数据(2.4.6版本加入)

  • 支持选择器所有文案定制(2.4.6版本加入)

  • 已适配AndroidQ(2.4.6版本加入)

  • 支持直接拍摄视频(2.4.6版本加入)

引入依赖

androidx版本:

implementation 'com.ypx.yimagepicker:androidx:2.4.6.2'

support版本: (暂未更新)

implementation 'com.ypx.yimagepicker:support:2.4.5'

核心原理

YImagePicker与主项目通过presenter进行交互与解耦,presenter采用序列化接口的方式实现。回调采用嵌入fragment的方式实现,类似于Glide或RxPermisson.原理上还是使用OnActivityResult,但无需再配置requestCode并且支持跨进程回调。

小红书样式需要实现:ICropPickerBindPresenter
微信样式需要实现:IMultiPickerBindPresenter

点击查看详细API文档

apk体验地址

效果图集

  • demo效果

  • 小红书样式

  • 微信样式

  • 自定义样式

  • 自定义比例剪裁

点击查看详细API文档

微信图片选择

支持视频、GIF、长图选择,支持选择状态保存。调用前请按照demo实现IMultiPickerBindPresenter接口 ,示例如下:

ImagePicker.withMulti(new WXImgPickerPresenter())//指定presenter.setMaxCount(9)//设置选择的最大数.setColumnCount(4)//设置列数.mimeType(MimeType.ofAll())//设置要加载的文件类型,可指定单一类型.filterMimeType(MimeType.GIF)//设置需要过滤掉加载的文件类型.showCamera(true)//显示拍照.setPreview(true)//开启预览.setVideoSinglePick(true)//设置视频单选.setSinglePickImageOrVideoType(true)//设置图片和视频单一类型选择.setMaxVideoDuration(120000L)//设置视频可选取的最大时长.setMinVideoDuration(60000L)//设置视频可选取的最小时长.setLastImageList(null)//设置上一次操作的图片列表,下次选择时默认恢复上一次选择的状态.setShieldList(null)//设置需要屏蔽掉的图片列表,下次选择时已屏蔽的文件不可选择.pick(this, new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//图片选择回调,主线程}});

小红书图片选择

高仿小红书图片剪裁框架,支持视频以及多图剪裁、支持视频预览,支持UI自定义,支持fragment样式侵入。调用前请按照demo实现ICropPickerBindPresenter接口 ,示例如下:

ImagePicker.withCrop(new RedBookCropPresenter())//设置presenter.setMaxCount(9)//设置选择数量.showCamera(true)//设置显示拍照.setColumnCount(4)//设置列数.mimeType(MimeType.ofImage())//设置需要加载的文件类型.filterMimeType(MimeType.GIF)//设置需要过滤掉的文件类型.setFirstImageItem(null)//设置上一次选中的图片.setFirstImageUrl(null)//设置上一次选中的图片地址.setVideoSinglePick(true)//设置视频单选.setCropPicSaveFilePath("剪裁图片保存路径").setMaxVideoDuration(2000L)//设置可选取的最大视频时长.setMinVideoDuration(60000L)//设置视频可选取的最小时长.pick(this, new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//图片剪裁回调,主线程//注意:剪裁回调里的ImageItem中getCropUrl()才是剪裁过后的图片地址}});

预览

支持普通预览和编辑预览,示例如下:

//配置需要预览的所有图片列表
ArrayList<ImageItem> allPreviewImageList = new ArrayList<>();
//默认选中的图片索引
int defaultPosition = 0;
//开启编辑预览
ImagePicker.preview(this, new WXImgPickerPresenter(), allPreviewImageList, defaultPosition, new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//图片编辑回调,主线程}});

拍照

支持直接打开摄像头拍照,示例如下:

ImagePicker.takePhoto(this, "拍照保存路径", new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//拍照回调,主线程}});

拍摄视频

支持直接打开摄像头拍视频,示例如下:

ImagePicker.takeVideo(this, "视频保存路径", new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//拍照回调,主线程}});

调用选择器并剪裁

支持选择图片完调用剪裁,支持自定义比例剪裁,支持圆形剪裁,示例如下:

ImagePicker.withMulti(new WXImgPickerPresenter()).mimeType(MimeType.ofImage()).filterMimeType(MimeType.GIF)//设置剪裁比例.setCropRatio(1,1).cropSaveFilePath("剪裁图片保存路径")//设置剪裁框间距,单位px.cropRectMinMargin(50)//是否圆形剪裁,圆形剪裁时,setCropRatio无效.cropAsCircle()//设置剪裁模式,留白或充满  CropConfig.STYLE_GAP 或 CropConfig.STYLE_FILL.cropStyle(CropConfig.STYLE_FILL)//设置留白模式下生成的图片背景色,支持透明背景.cropGapBackgroundColor(Color.TRANSPARENT).crop(this, new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//图片剪裁回调,主线程}});

拍照并剪裁

支持直接打开摄像头拍照并剪裁,支持自定义比例剪裁和圆形剪裁,示例如下:

//配置剪裁属性
CropConfig cropConfig = new CropConfig();//设置剪裁比例
cropConfig.setCropRatio(1, 1);
//设置剪裁框间距,单位px
cropConfig.setCropRectMargin(100);
cropConfig.setCropSaveFilePath("剪裁生成的图片路径");
//是否圆形剪裁,圆形剪裁时,setCropRatio无效
cropConfig.setCircle(false);
//设置剪裁模式,留白或充满  CropConfig.STYLE_GAP 或 CropConfig.STYLE_FILL
cropConfig.setCropStyle(CropConfig.STYLE_GAP);
//设置留白模式下生成的图片背景色,支持透明背景
cropConfig.setCropGapBackgroundColor(Color.TRANSPARENT );
//调用拍照
ImagePicker.takePhotoAndCrop(this, new WXImgPickerPresenter(), cropConfig, new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//剪裁回调,主线程}});

直接剪裁

支持直接跳转剪裁页面,示例如下:

CropConfig cropConfig = new CropConfig();//设置剪裁比例
cropConfig.setCropRatio(1, 1);
//设置剪裁框间距,单位px
cropConfig.setCropRectMargin(100);
cropConfig.setCropSaveFilePath("剪裁生成的图片路径");
//是否圆形剪裁,圆形剪裁时,setCropRatio无效
cropConfig.setCircle(false);
//设置剪裁模式,留白或充满  CropConfig.STYLE_GAP 或 CropConfig.STYLE_FILL
cropConfig.setCropStyle(CropConfig.STYLE_GAP);
//设置留白模式下生成的图片背景色,支持透明背景
cropConfig.setCropGapBackgroundColor(Color.TRANSPARENT );
//调用剪裁
String needCropImageUrl="需要剪裁的图片路径";
ImagePicker.crop(this, new WXImgPickerPresenter(), cropConfig, needCropImageUrl,new OnImagePickCompleteListener() {@Overridepublic void onImagePickComplete(ArrayList<ImageItem> items) {//剪裁回调,主线程}});

提供媒体数据——支持回调相册数据、所有媒体数据、指定相册内媒体数据

获取媒体相册数据

//指定要回调的相册类型,可以指定13种图片视频文件格式混合
Set<MimeType> mimeTypes = MimeType.ofAll();
ImagePicker.provideMediaSets(this, mimeTypes, new MediaSetsDataSource.MediaSetProvider() {@Overridepublic void providerMediaSets(ArrayList<ImageSet> imageSets) {//相册列表回调,主线程}
});

获取全部媒体文件

//指定要回调的相册类型,可以指定13种图片视频文件格式混合
Set<MimeType> mimeTypes = MimeType.ofAll();
ImagePicker.provideAllMediaItems(this, mimeTypes, new MediaItemsDataSource.MediaItemProvider() {@Overridepublic void providerMediaItems(ArrayList<ImageItem> imageItems, ImageSet allVideoSet) {//全部媒体数据回调,主线程//只有当mimeTypes既包含图片或者视频格式文件时,allVideoSet才有值}});

获取指定相册内全部媒体文件

//指定要回调的相册类型,可以指定13种图片视频文件格式混合
Set<MimeType> mimeTypes = MimeType.ofAll();
//指定相册,id不能为空
ImageSet imageSet = new ImageSet();
ImagePicker.provideMediaItemsFromSet(this, imageSet, mimeTypes, new MediaItemsDataSource.MediaItemProvider() {@Overridepublic void providerMediaItems(ArrayList<ImageItem> imageItems, ImageSet allVideoSet) {//全部媒体数据回调,主线程//只有当mimeTypes既包含图片或者视频格式文件时,allVideoSet才有值}});

预加载获取指定相册内全部媒体文件

//指定要回调的相册类型,可以指定13种图片视频文件格式混合
Set<MimeType> mimeTypes = MimeType.ofAll();
//指定相册,id不能为空
ImageSet imageSet = new ImageSet();
//预加载个数
int preloadSize = 40;
ImagePicker.provideMediaItemsFromSetWithPreload(this, imageSet, mimeTypes, preloadSize, new MediaItemsDataSource.MediaItemPreloadProvider() {@Overridepublic void providerMediaItems(ArrayList<ImageItem> imageItems) {//预加载回调,预先加载指定数目的媒体文件回调}},new MediaItemsDataSource.MediaItemProvider() {@Overridepublic void providerMediaItems(ArrayList<ImageItem> imageItems, ImageSet allVideoSet) {//所有媒体文件回调}});

Presenter指定、自定义Item样式、自定义皮肤UI、自定义提示常量、设置选择器调用失败回调、自定义回调类型

详细使用方法请查看详细API文档

版本记录

查看详细版本记录

2.4.6版本 [2019.11.02]

  1. 【BUG修复】修复了红米拍照闪退问题
  2. 【BUG修复】取消了选择器没有文件时直接退出选择器的策略。改为提示语句“暂未发现媒体文件”.
  3. 【适配】已适配AndroidQ,解决targetSdkVersion设置29时数据库报错的bug
  4. 【新增】新增直接拍摄视频
  5. 【新增】presenter新增overMaxCountTip、interceptPickerCancel、interceptVideoClick、getPickConstants四个方法
  6. 【新增】新增PickConstants用于修改选择器所有文案,在presenter中指定
  7. 【新增】支持直接回调媒体数据,其中包含回调相册列表、全部媒体文件、指定相册里媒体文件,支持指定数量预加载。
  8. 【新增】新增退出选择器时拦截回调,新增点击视频item的拦截回调,在presenter中指定
  9. 【新增】新增视频最小选择时长
  10. 【优化】重构了预览页面,将选择器预览和通用预览分离,降低耦合度
  11. 【优化】统一整理了资源文件命名,以及删除不必要的资源
  12. 【调整】clearAllCache方法已废弃
  13. 【调整】原有的选择器拍照会直接回调出照片,现在改为生成在选择器的第一个
  14. 【调整】当选择器只加载视频时,拍照item支持拍摄视频,其他情况均为拍照
  15. 【优化】选择器调用屏蔽多次点击,调用多次
  16. 【优化】所有不可选择的item(置灰)选中均会有具体的提示

下个版本排期

时间:2019年11月中旬

  1. 适配AndroidQ(2.4.6已支持)
  2. 微信选择器加入原图选项
  3. 支持对外暴露数据源,以便于实现类似QQ发消息时的选择图片(2.4.6已支持)
  4. 实现最新版微信样式
  5. 剪裁支持输出指定大小图片
  6. 等你来提

计划TODO:

  1. 视频预览框架切换(吐槽:官方videoView太难用了~~/(ㄒoㄒ)/~~)
  2. 图片剪裁支持旋转
  3. 支持JPEG、PNG、GIF、BMP、WEBP、MPEG、MP4、QUICKTIME、THREEGPP、THREEGPP2、MKV、WEBM、TS、AVI等图片视频文件格式混合加载或指定加载(2.4.4已支持)

永不TODO:

  1. 不会支持图片压缩,请使用者自行使用luBan
  2. 不会支持图片和视频高级编辑(滤镜、贴纸等)

感谢

  • 本框架媒体库查询部分借鉴于知乎开源框架Matisee,并在其基础上拓展并延伸,让查询更富有定制性,在此对原作者表示感谢。

  • 本库来源于mars App,想要体验城市最新的吃喝玩乐,欢迎读者下载体验mars!

  • 感谢所有支持或Star本项目的使用者,感谢所有给我提Issue的朋友们 ~~ 鞠躬 ~~!

心声

因本人最近顺利的当了爸爸,需要照顾老婆和小孩,所以有些时候消息回复的不是很及时,很多问题没能够给使用者及时的回复,在这里由衷的表示歉意。 YImagePicker从当初的只支持微信图片选择器到支持小红书样式,再到各种自定义,可谓花费了我近一年多的时光,可能有人觉得这个项目很简单,但是从开源性的角度上来说,很多时候代码不是我们想怎么写就怎么写的。为了达成统一风格,本人也借鉴了不下于20多个图片选择库。但是随着业务的复杂和机型的多样,不得不一遍一遍重构,其中带来了不少的问题,也学习到了很多。在我的计划中,本库只是一个开始,虽然定制性很强,但是代码逻辑还是有些复杂,架构还需要不断调整。可能使用者在使用的过程中会出现各种各样的问题,还请不要对本库放弃,可以大胆的加我联系方式并反馈给我(喷我),如果BUG紧急,我也会加班完善它,至于那些取消star或者不看好本框架的,我也只能说声抱歉,没有解决掉你们的痛点。还是那句老话,没有什么是完美的,但我会力所能及~

点击查看Github地址

  • 作者:calorYang
  • 邮箱:313930500@qq.com
  • Q Q: 313930500
  • 微信:calor0616

遇到问题别绕路,QQ微信直接呼~ 您的star就是我前进的动力~

集小红书图片剪裁+微信图片选择器+自定义图片剪裁于一体的YImagePicker相关推荐

  1. 小红书“复刻”微信,微信“内造”小红书

    配图来自Canva可画 随着互联网增长红利逐渐见顶,各大互联网平台对流量的争夺变得愈发激烈.而为了寻找新的业务可能性,各家都在不遗余力地拓宽自身边界.在此背景下,目前最为"吸睛"和 ...

  2. 微信小程序中base64转换成图片;uni-app小程序base64转图片;微信小程序base64文件转图片;微信小程序base64图片转图片

    将微信小程序的图片转成base64 点击此链接看另一篇 以下是将后端返回的base64转成图片: 方法1:使用微信小程序自带方法 //把base64转换成图片getBase64ImageUrl: (b ...

  3. 微信从原版到现在所有界面图片_微信进入界面的图片有什么含义

    展开全部 微信进入界面的图片e5a48de588b63231313335323631343130323136353331333365646262含义如下: 事实上,这是一幅真实的图片.这是用哈苏照相机 ...

  4. 微信缓存dat怎么转图片_微信dat文件转换为图片

    微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...

  5. 阿里服务器微信发不了图片,为什么微信发不了图片?这四招教你解决难题

    原标题:为什么微信发不了图片?这四招教你解决难题 [科技讯]12月25日消息,大家在使用微信的时候,有时候会遇到无法在微信朋友圈里发送图片的情况,那么,为什么微信会发不了图片?如果遇到这种情况又该怎么 ...

  6. 微信缓存dat怎么转图片_PC微信dat如何转图片?方式方法

    微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...

  7. 相对路径找不到图片_微信聊天视频、图片、语音记录等文件管理器,再也不怕找不到聊天文件了!...

    微信作为我们打开频率最高的应用之一,每天都会浏览.加载一些视频.图片还有别人发过来的语音等文件. 这些文件很多是我们不能直接管理的,所谓积少成多,渐渐的各种缩略图.加载过的文件越来越多,所占的存储空间 ...

  8. 【Android 控件使用及源码解析】 GridView规则显示图片仿微信朋友圈发图片

    今天闲下来想用心写一点东西,发现没什么可写的,就写一下最近项目上用到的一些东西吧.最近项目要求上传多图并且多图显示,而且要规则的显示,就像微信朋友圈的图片显示一样. 想了一下用GridView再适合不 ...

  9. 用MySQL绘制新年祝福图形_2017微信拜年图片-2017微信拜年动态表情图片高清完整版-东坡下载...

    2017新年已经快要来了!现在为大家带来最新的2017微信拜年动态表情图片,你可以使用这些表情与你的亲戚朋友一起聊天,更多的情谊更多的祝福都可以通过表情包而使用出来,感兴趣的可以看看! 2017微信拜 ...

最新文章

  1. ubuntu命令行登录
  2. git下载安装、验证、企业实战单机、多人协作
  3. 笔记16(shell编程)
  4. 最新邮箱密码破解方法
  5. 二进制高可用安装k8s集群部署
  6. git 添加远程仓库并将第一次本地库的已有所有内容推送到远程库上遇到的一个错误...
  7. 基于Pytorch实现GAT(图注意力网络)
  8. POI 在 word中 画图 以及图例刷新
  9. 电脑插上网线无法连接网络完美解决方案
  10. 计算机电源出现问题,电源故障引起的电脑问题
  11. 微信小程序之实现到商品列表跳转商品详情页
  12. 通过禁用受保护的视图来启用所有Office 2010文档的编辑
  13. Excel VBA语句集300
  14. CMAP1000-05气象数字压力校验系统
  15. springboot+小程序老年人健康保障管理系统毕业设计源码302303
  16. 圈粉年轻人的“机票盲盒”,爆款的逻辑是什么?
  17. OSChina 周六乱弹 ——姑娘原来你爱的是如来
  18. 大一上学期期末计算机考试试题,大一第一学期期末考试计算机试题1
  19. 浙大远程教育离线作业计算机2,浙大远程教育操作系统原理离线作业参考答案.doc...
  20. 项目管理中风险评价的必要性(转)

热门文章

  1. html5 3d签到墙,index.html
  2. C#编写QQ找茬外挂
  3. 且看如何用课件制作工具验证完全平方公式
  4. 记住我remember-me功能的几种实现方式
  5. 不要随大流去参加提前批
  6. 谈谈与Elasticsearch创始人Shay Banon面对面交流后的意外收获
  7. 哪些原因比较容易诱发胆囊炎?
  8. 代码随想录算法训练营第八天|kmp算法
  9. 频率响应范围测试软件,Analog Discovery 2 测评(3) 频率响应测试利器
  10. 基于Golang的http、web服务框架(SSSS)