Laravel使用simple-QRcode设置圆形定位眼后眼球仍为方形的问题
Laravel中Simple-QRcode生成全圆形定位眼二维码的解决方案
使用Simple-QRcode包生成二维码时,调用eye('circle')仅能修改定位眼的外框为圆形,内部眼球仍为方形,无法达到内外全圆的效果。
当前使用的生成代码:
QrCode::size(200) ->eye('circle') ->style('round') ->format('png') ->generate('Example', public_path('test.png'));
实际生成效果:
期望实现效果:
解决方案
Simple-QRcode依赖的endroid/qr-code库中,默认的EyeCircle类仅绘制圆形外框,内部仍使用方形填充。要实现全圆形定位眼,需要自定义眼的绘制逻辑:
步骤1:创建自定义圆形眼类
在项目中创建自定义眼类,继承默认的EyeCircle并重写绘制方法,替换内部方形填充为圆形:
<?php namespace App\QrCode; use Endroid\QrCode\Eye\EyeCircle; use Endroid\QrCode\Renderer\Path\Path; use Endroid\QrCode\Renderer\RendererInterface; class CustomCircleEye extends EyeCircle { public function draw(RendererInterface $renderer, int $size): void { // 绘制外圆环(保留原有逻辑) $outerPath = new Path(); $outerPath->addCircle($size / 2, $size / 2, $size / 2); $outerPath->addCircle($size / 2, $size / 2, $size / 2 * 0.7); $outerPath->setOperation(Path::OPERATION_DIFFERENCE); $renderer->drawPath($outerPath); // 绘制内部实心圆(替换原方形填充) $innerPath = new Path(); $innerPath->addCircle($size / 2, $size / 2, $size / 2 * 0.4); $renderer->drawPath($innerPath); } }
步骤2:使用自定义眼生成二维码
在生成逻辑中调用customEye方法,传入自定义眼类的实例:
use App\QrCode\CustomCircleEye; use SimpleSoftwareIO\QrCode\Facades\QrCode; QrCode::size(200) ->customEye(new CustomCircleEye()) ->style('round') ->format('png') ->generate('Example', public_path('test.png'));
补充说明
- 确保项目依赖的
endroid/qr-code版本≥4.0,否则可能不支持自定义眼接口; - 可调整代码中
0.7、0.4等比例参数,修改外圆环宽度和内部圆的大小,适配不同视觉需求。
内容的提问来源于stack exchange,提问作者Rizwan
相关产品推荐
相关产品推荐

