剪刀手:Android平台上的图片裁剪库

几个月前我们往我们的App中引入个人简介功能后,Helen——我们其中一个特性团队的工程师——接到了对个人简介进行第二次迭代的任务。这次版本迭代包括了众多的改进,其中包括支持自定义个人头像功能,头像可以用相机直接拍摄,也可以从Gallery或者Photos这类相册App中选择。

Lyft的Android版本自定义图像的早期设计Lyft的Android版本自定义头像的早期设计

在图片被上传到服务器之前,图片必须被裁剪以符合一定的要求,这其中包括:

  • 放大到原尺寸的200%
  • 移动和截图
  • 不管在什么样的屏幕密度上都保持固定的比例
  • 基于当前屏幕尺寸进行裁剪

因为在Lyft我们都喜欢开源,所以自然而然的想到了搜索现成的解决方案。但是没有一个能满足我们的需求,所以我们决定自己动手实现这个需求。一晃几个月过去了,我们现在打算将这个库(Scissors)的核心代码开源。

Scissors

这个库能做什么?

Scissors提供了一个叫做CropView的控件,它继承于ImageView并且提供了熟悉的方式来提供用于裁剪的图像,比如使用setImageBitmap来设置要裁剪的图像。一旦用户设置好了要裁剪的位置和缩放比例(这受限于cropviewMaxScale和cropviewMinScale)只需调用

Bitmap croppedBitmap = cropView.crop();

该方法返回的Bitmap符合视图的尺寸,这个尺寸可以通过cropviewViewportHeightRatio来进行控制。

扩展

我们也提供了一些实用的扩展来进行一些常见的任务,比如:

  • 使用Picasso或者Glide往CropView里加载Bitmap并且让图片适应视图的尺寸

    cropView.extensions()
    .load(galleryUri);

    你也可以用你喜欢的方式创建自定义的BitmapLoader来提供Bitmap

    *在不阻塞主线程的前提下保存裁剪好的Bitmap到文件或者流中

    cropView.extensions()
    .crop()
    .quality(87)
    .format(PNG)
    .into(croppedFile);

    你也可以指定裁剪后输出到文件或者流中的图片格式和质量

未来的计划

我们想让Scissors越来越好用,所以以后Scissors将会支持双击拖动与缩放,同时也会修复一些bug和进行一些优化。我们希望Scissors对你来说是有用的并且能够满足你所有关于图片裁剪的需求。

开始使用Scissors吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值