微信小程序官方並未提供分享到朋友圈的方法,因此目前基本整個行業都是使用生成圖文海報發到朋友圈,而後識別太陽碼進入到小程序。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