前言:
- Grafika只支持从资源地址打开/创建图片,并不支持从二进制流base64打开图片
- Grafika图片旋转方法rotate()存在bug
缘起:
公司h5项目需要处理图片。主要流程是:从微信上传图片->对图片进行操作(编辑挂件、滤镜、竖图旋转、圆角处理)->生成base64显示。
而从微信临时文件接口获取到的图片文件只是二进制图片数据,项目紧急前端没有找到从二进制获取到图片宽高的方法(判断是否需要旋转),于是决定由后端来实现,使用Grafika插件。
燃鹅。。。在使用的过程中,发现Grafika并不支持从二进制图片数据中打开图片资源,并且在旋转图片的时候存在bug
解决:
- 修改Grafika open()方法,使其可以读取图片二进制流数据构造图片对象
- 修改Grafika的旋转方法,在旋转后置换宽高
Grafika支持gd和Imagick两种图片处理库,使用isAvailable()方法来判断服务器是否支持gd或Imagick扩展
$editor = Grafika::createEditor();
if($editor->isAvailable()){
//处理图片
}
如果两种扩展都有Grafika会默认使用Imagick来处理图片。所以我们在修改支持读取二进制图片数据的时候,需要对该库的gd和Imagick都进行修改