Laravel 生成小程序图文海报最佳方案之一

2020-01-09 15:50:00 所属分类:技术文章

微信小程序官方并未提供分享到朋友圈的方法,所以目前基本整个行业都是使用生成图文海报发到朋友圈,然后识别太阳码进入到小程序。

通过谷歌或者百度有很多同学已经提供了一些解决方案,但是在我们使用后效果并不是很理想,主要体现在以下方面:

  1. 通过 PHP 写入的字体效果并不理想。

  2. 背景图片和微信头像合成后清晰度不够。

  3. 无法实现一些复杂的效果。

  4. 实现过程也较复杂。

最终我们找了一种认为非常合理的实现方式,就是基于 PhantomJS 实现,通过 PhantomJS 隐形浏览器截图的功能来生成海报。

PhantomJS 是一个基于 webkit 的 JavaScript API。它使用 QtWebKit 作为它核心浏览器的功能,使用 webkit 来编译解释执行 JavaScript 代码。任何你可以在基于 webkit 浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如 CSS 选择器、支持 Web 标准、DOM 操作、JSON、HTML5、Canvas、SVG 等,同时也提供了处理文件 I/O 的操作,从而使你可以向操作系统读写文件等。PhantomJS 的用处可谓非常广泛,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。

有以下优点:

  1. 基于 html 可实现复杂的文字,图片,阴影效果。

  2. 清晰度和文件大小合理

  3. 使用简单、即插即用

包地址:laravel-miniprogram-poster 求 star : )

安装

composer require ibrand/laravel-miniprogram-poster

配置项

    return [
        //图片存储位置
        'disks'      => [
            'MiniProgramShare' => [
                'driver'     => 'local',
                'root'       => storage_path('app/public/share'),
                'url'        => env('APP_URL') . '/storage/share',
                'visibility' => 'public',
            ],
        ],
        //图片宽度
        'width'      => '575px',
        //放大倍数
        'zoomfactor' => 1.5,
        //0-100,100质量最高
        'quality'    => 100,
        //是否压缩图片
        'compress'   => true,
    ];

使用

use iBrand\Miniprogram\Poster\MiniProgramShareImg;$url = 'https://www.ibrand.cc/';$result = MiniProgramShareImg::generateShareImage($url);

返回结果:

    [
        'url'  => 'http://xxx.png',   图片访问url        'path' => 'path/to/image', 图片文件路径    ]

字体安装

如果需要实现复杂的字体效果,需要安装字体,比如在 centos 上就没有微软雅黑的字体,所以如果生成的图片有指定的特殊字体,需要在服务器上进行安装。