PHP-Grafika从二进制图片数据载入图片踩坑

本文介绍了在使用PHP的Grafika库处理从微信获取的二进制图片数据时遇到的问题,包括Grafika不支持直接处理二进制数据以及旋转图片的bug。解决方案包括修改Grafika的`open()`方法以支持二进制流,并修复旋转后图片宽高未更新的问题。此外,还提到当同时存在gd和Imagick扩展时,需要对两个库进行相应的修改。
摘要由CSDN通过智能技术生成

前言:

  • Grafika只支持从资源地址打开/创建图片,并不支持从二进制流base64打开图片
  • Grafika图片旋转方法rotate()存在bug

缘起:

公司h5项目需要处理图片。主要流程是:从微信上传图片->对图片进行操作(编辑挂件、滤镜、竖图旋转、圆角处理)->生成base64显示。

而从微信临时文件接口获取到的图片文件只是二进制图片数据,项目紧急前端没有找到从二进制获取到图片宽高的方法(判断是否需要旋转),于是决定由后端来实现,使用Grafika插件。

燃鹅。。。在使用的过程中,发现Grafika并不支持从二进制图片数据中打开图片资源,并且在旋转图片的时候存在bug


解决:

  1. 修改Grafika open()方法,使其可以读取图片二进制流数据构造图片对象
  2. 修改Grafika的旋转方法,在旋转后置换宽高

Grafika支持gd和Imagick两种图片处理库,使用isAvailable()方法来判断服务器是否支持gd或Imagick扩展

$editor = Grafika::createEditor();
if($editor->isAvailable()){
    //处理图片
}

如果两种扩展都有Grafika会默认使用Imagick来处理图片。所以我们在修改支持读取二进制图片数据的时候,需要对该库的gd和Imagick都进行修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值