您的位置:首页 > 移动开发 > 微信开发

Android仿微信图片编辑库,你想要的功能这里都有

2018-01-14 23:01 1466 查看
最近项目需要,写了一个和微信中图片编辑功能类似的图片编辑库,除去问题操作上摈弃掉不方便的手势操作外,其余微信中的核心功能全部一致,保留了微信中涂鸦、马赛克、文字等随时随着图片缩放的功能,这点是我所找的库都不提供的功能,也是我从零去完成这个图片编辑库的原因。

Github地址:https://github.com/kareluo/Imaging



功能说明

这里针对其中的几个主要功能点进行一些简要说明,如果大家想要详细了解可以查看Demo代码,已经类库的源码。

1、涂鸦功能

涂鸦的路径是使用Path对象记录手势路径,

switch(event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
path.reset();
path.moveTo(event.getX(), event.getY());
break;
case MotionEvent.ACTION_MOVE:
path.lineTo(event.getX(), event.getY());
break;
case MotionEvent.ACTION_UP:
// 添加到Path列表中
break;
}


然后绘制到Canvas对象上,并给画笔设定Width和Color。

2、马赛克功能

马赛克的路径部分和涂鸦相同,这里不用多说,主要是马赛克如何生成,一个很简单的办法就是先把整张图进行缩小,然后将其放大至现有大小绘制出时,其就会很模糊,但是这个模糊不是马赛克效果,这时只需要为其指定一个Paint,并将Paint对象的filterBitmap设置为false即可。然后在和路径合成便成立马赛克笔触。

// 保存图层
paint.setFilterBitmap(false);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
// 绘制路径
// 绘制马赛克全图
// 恢复图层


3、文字功能

文字功能相比涂鸦和马赛克来说其实难很多,这里使用的方式和微信的略有不同,如下:



文字的缩放、旋转和删除都不是使用手势方式,而是使用按钮,这种方式比手势的易用性高很多。

这里每个文字贴图都是一个子控件,相对于这个图片编辑的底图来说,底图其实是一个ViewGroup,这个子控件在ViewGroup里面旋转缩放,摆放位置等。具体实现这里不说了,三言两语很难说清。

4、裁剪与旋转

当时旋转是最后做的,旋转的加入让整个项目陷入崩溃边缘,所有操作都强行加入了选择这个后来者,头大,裁剪相对还不算问题,主要是动画的问题比较多,因为要做到和微信极度接近,裁剪和旋转动画的效果也是基本还原微信效果。

当裁剪出某个区域后并不会将Bitmap对象进行裁剪,而是调整显示区域使其模拟出裁剪的效果,以备还原到原图,如下:

// 裁剪区域
canvas.clipRect(mClipWin.isClipping() ? mFrame : mClipFrame);


后记

目前这个类库刚完成全部核心功能,很多细节还在不断完善中。

Github地址:https://github.com/kareluo/Imaging
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息