资讯专栏INFORMATION COLUMN

简单 强大的图片操作库

U2FsdGVkX1x / 2000人阅读

摘要:最近在重构的图片模块,就顺便写了这个图片操作库,其中基本涵盖了开发中所有的图片操作。项目地址这个库基本上封装了中图片的所有操作,使用过程中如有问题欢迎。

最近在重构APP的图片模块,就顺便写了这个图片操作库,其中基本涵盖了APP开发中所有的图片操作。

该图片库包含的功能

图片加载库的二次封装;

相册功能

从相册/相机选择照片并裁剪;

图片压缩;

上传图片到服务器;

上传图片到七牛;

模块介绍 图片加载库的二次封装

对Fresco, ImageLoader, Glide进行了统一的封装,当然也可进行扩展。具体可参见ImageLoaderManager

相册功能

类似朋友圈选择照片,提供了简洁的使用接口,可快速实现选择多张照片的功能;

// 跳转到相册页面
new PhotoPicker.Builder()
    .setIsDialog(false)
    .setIsShowCamera(false)
    .setMaxPhotoCount(3)
    .setSelectedPhotos(selectedPhotos)
    .builder().chooseImage(AlbumActivity.this);

// 获取选择的照片        
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PhotoPicker.REQUEST_CODE_CHOOSE_PHOTO && data != null) {
        selectedPhotos = data.getStringArrayListExtra(PhotoPicker.SELECTED_PHOTOS);
        if (selectedPhotos != null && selectedPhotos.size() > 0) {
            // 处理逻辑
        }
    }
}

PS:这里的处理逻辑参考了PhotoPicker

从相册/相机选择照片

这可能是APP不可或缺的一个小功能,不过其中也存在许多兼容性的坑,为了便于以后使用,将其封装成了一个简单的工具类,通过简单的几行代码即可实现更换头像的操作。

// 选择照片后是否需要裁剪
ChoosePhotoManager.getInstance().setAutoCrop(true);
// 从相机获取照片
ChoosePhotoManager.getInstance().choosePhotoFromCamera(ChooseAndCropImageActivity.this);
// 从相册选择照片
ChoosePhotoManager.getInstance().choosePhotoFromAlbum(ChooseAndCropImageActivity.this);
// 监听选择照片的结果
ChoosePhotoManager.getInstance().setChoosePhotoListener(new OnChoosePhotoListener() {
   
    @Override
    public void choosePhotoFromAlbum(Uri uri, String errMsg) {
        // 从相册选择的照片路径
    }
    
    @Override
    public void choosePhotoFromCamera(Uri uri, String errMsg) {
        // 拍照获取的的照片路径
    }
    
    @Override
    public void cropPhoto(Uri uri, String errMsg) {
        // 裁剪之后的照片路径
    }
});
图片压缩

为了更好的用户体验,减小服务器的存储压力,在上传图片之前我们应该进行适当的压缩,这里采用Luban库,通过简单的调用即可在上传图片前压缩。

void compressImage(Context context, String filePath, OnCompressListener listener)
上传图片到服务器

既然选择了照片,那肯定需要上传操作,这里为了减小对其他开源库的依赖,使用了HttpURLConnection实现的上传操作(当然,OKHttp的上传文件更简单)。

// 默认开启了图片压缩, 当然可通过两个重载方法进行控制
uploadToInnerServer(Activity context, String serverAddress, String
filePath, final OnUploadListener listener)
上传图片到七牛

图片上传的方式有两种,一种是上传到公司服务器,然后由公司服务器上传到图片服务器,另一种就是直接从客户端上传到图片服务器。上传到七牛就是第二种方案:先从公司服务器获取token, 然后上传图片到七牛服务器。

void uploadToQiNiu(Activity context, String token, String filePath, OnUploadToQiNiuListener listener)

项目地址

ImageSet

这个库基本上封装了APP中图片的所有操作,使用过程中如有问题欢迎issue。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71159.html

相关文章

  • javascript功能插件大集合 前端常用插件 js常用插件

    摘要:转载来源包管理器管理着库,并提供读取和打包它们的工具。能构建更好应用的客户端包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。很棒的组件集合。隐秘地使用和用户数据。 转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具。•npm – npm 是 javasc...

    netmou 评论0 收藏0
  • javascript功能插件大集合 前端常用插件 js常用插件

    摘要:转载来源包管理器管理着库,并提供读取和打包它们的工具。能构建更好应用的客户端包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。很棒的组件集合。隐秘地使用和用户数据。 转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具。•npm – npm 是 javasc...

    Hydrogen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<