微信小程序官方并未提供分享到朋友圈的方法,因此目前基本整个行业都是使用生成图文海报发到朋友圈,而后识别太阳码进入到小程序。php
经过谷歌或者百度有不少同窗已经提供了一些解决方案,可是在咱们使用后效果并非很理想,主要体如今如下方面:html
最终咱们找了一种认为很是合理的实现方式,就是基于 PhantomJS 实现,经过 PhantomJS 隐形浏览器截图的功能来生成海报。laravel
PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit做为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你能够在基于webkit浏览器作的事情,它都能作到。它不只是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操做、JSON、HTML五、Canvas、SVG等,同时也提供了处理文件I/O的操做,从而使你能够向操做系统读写文件等。PhantomJS的用处可谓很是普遍,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。git
有如下优势:github
包地址:laravel-miniprogram-poster 求 star : )web
扫码进入商品详情页分享生成图文体验小程序
composer require ibrand/laravel-miniprogram-poster
低于 Laravel5.5 版本,config/app.php
文件中 'providers' 添加iBrand\Poster\PhantoMmagickServiceProvider::class
微信小程序
图片保存在 storage/app/public
下因此须要执行 php artisan storage:link
centos
如需自定义配置请执行 php artisan vendor:publish --provider="iBrand\Poster\PhantoMmagickServiceProvider" --tag="config"
浏览器
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 上就没有微软雅黑的字体,因此若是生成的图片有指定的特殊字体,须要在服务器上进行安装。
# 安装微软雅黑 wget -P /tmp/ https://iyoyo.oss-cn-hangzhou.aliyuncs.com/mirror/fonts/msyh.ttf wget -P /tmp/ https://iyoyo.oss-cn-hangzhou.aliyuncs.com/mirror/fonts/msyhbd.ttf wget -P /tmp/ https://iyoyo.oss-cn-hangzhou.aliyuncs.com/mirror/fonts/msyhl.ttf cd /usr/share/fonts/lyx/ mkdir chinese cd chinese mv /tmp/msyhbd.ttf ./ chmod 755 *.ttf yum -y install mkfontscale mkfontscale mkfontdir fc-cache -fv
项目基于PhantomMagick