摘要:背景之前已經使用寫過調用的文章不讓我使用所以只好使用調用上的包功能很冗余我只需要用到的截圖功能知識儲備系統安裝權限相關知識基本語法知識函數調用截圖文檔代碼代碼環境為框架獲取參數中文件的決定路徑獲取有權限的臨時文件目錄獲取有權限的臨時文件目
背景
之前已經使用golang寫過調用phantomjs的文章
CTO不讓我使用golang所以只好使用php調用phantomjs
packagist上的composer包功能很冗余,我只需要用到phantomjs的截圖功能
知識儲備*unix系統安裝phantomjs,權限相關知識
基本JavaScript語法知識
php exec函數調用REPL phantomjs
phantomjs js截圖文檔 http://javascript.ruanyifeng....
代碼(php 代碼環境為yii2框架)js_path = "{$dir}/script.js"; /** @var bool|string 獲取php 有777權限的臨時文件目錄 */ $this->temp_dir = Yii::getAlias("@runtime"); } /** * 截圖并上傳 * @param string $url * @param string $filename * @return string * @throws BizException */ public function screenShotThenSaveToOss(string $url, string $filename = "temp.jpg") { //輸出圖片的路徑 $outputFilePath = "{$this->temp_dir}/$filename"; //執行的phantomjs命令 //phantomjs 可執行文件必須是 絕對路徑 否則導致 exec 函數返回值127錯誤 $cmd = "usrlocalinphantomjs {$this->js_path} "$url" "$outputFilePath""; //捕捉不到phantomjs命令輸出結果 exec($cmd, $output); //檢查截圖文件是否存在 $isShotImgaeExist = file_exists($outputFilePath); if (!$isShotImgaeExist) { throw new BizException(0, "phantomjs截圖失敗", BizException::SELF_DEFINE); } //保存截圖到oss $result = $this->postScreenShotImageToOss($outputFilePath); //刪除臨時文件夾的截圖圖片 unlink($outputFilePath); return $result; } /** * 上傳截圖到阿里云直傳oss * @param string $screenshot_path * @return string */ public function postScreenShotImageToOss(string $screenshot_path): string { $ossKey = "raw_file_name"; $file = new CURLFile($screenshot_path, "image/jpeg", "file"); $tokenArray = $this->getOssPolicyToken("fetch"); $url = $tokenArray->host; $postData = [ "key" => "{$tokenArray->dir}/$ossKey", "policy" => $tokenArray->policy, "OSSAccessKeyId" => $tokenArray->accessid, "success_action_status" => "200", "signature" => $tokenArray->signature, "callback" => $tokenArray->callback, "file" => $file ]; $ch = curl_init(); //$data = array("name" => "Foo", "file" => "@/home/user/test.png"); curl_setopt($ch, CURLOPT_URL, $url); // Disable SSL verification curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true); // required as of PHP 5.6.0 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); //curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: $mime_type"]); $res = curl_exec($ch); $res = json_decode($res); curl_close($ch); if (empty($res) || $res->code != 0) { return ""; } else { return $res->data->url; } } /** * 調用管理后臺阿里云oss token接口 * @param null $url * @return array */ public function getOssPolicyToken($url = null) { $url = Yii::$app->params["oss_screen_shot_token_api"]; $ch = curl_init(); // Disable SSL verification curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Will return the response, if false it print the response curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Set the url curl_setopt($ch, CURLOPT_URL, $url); // Execute $result = curl_exec($ch); // Closing curl_close($ch); $res = json_decode($result); if (empty($res) || $res->code != 0) { return []; } else { return $res->data; } } }phantomjs javascript腳本內容
"use strict"; var system = require("system"); var webPage = require("webpage"); var page = webPage.create(); //設置phantomjs的瀏覽器user-agent page.settings.userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"; //獲取php exec 函數的命令行參數 if (system.args.length !== 3) { console.log(system.args); console.log("參數錯誤"); console.log("第2個參數為url地址 第3個參數為截圖文件名稱"); phantom.exit(1); } //命令行 截圖網址參數 var url = system.args[1]; //圖片輸出路徑 var filePath = system.args[2]; console.log("-------"); console.log(url); console.log("-------"); console.log(filePath); console.log("-------"); //設置瀏覽器視口 page.viewportSize = {width: 480, height: 960}; //打開網址 page.open(url, function start(status) { //1000ms之后開始截圖 setTimeout(function () { //截圖格式為jpg 80%的圖片質量 page.render(filePath, {format: "jpg", quality: "80"}); console.log("success"); //退出phantomjs 避免phantomjs導致內存泄露 phantom.exit(); }, 1000); });php調用phantomjs目錄結構
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95525.html
摘要:背景之前已經使用寫過調用的文章不讓我使用所以只好使用調用上的包功能很冗余我只需要用到的截圖功能知識儲備系統安裝權限相關知識基本語法知識函數調用截圖文檔代碼代碼環境為框架獲取參數中文件的決定路徑獲取有權限的臨時文件目錄獲取有權限的臨時文件目 背景 之前已經使用golang寫過調用phantomjs的文章 CTO不讓我使用golang所以只好使用php調用phantomjs packa...
摘要:微信小程序官方并未提供分享到朋友圈的方法,所以目前基本整個行業都是使用生成圖文海報發到朋友圈,然后識別太陽碼進入到小程序。背景圖片和微信頭像合成后清晰度不夠。 微信小程序官方并未提供分享到朋友圈的方法,所以目前基本整個行業都是使用生成圖文海報發到朋友圈,然后識別太陽碼進入到小程序。 通過谷歌或者百度有很多同學已經提供了一些解決方案,但是在我們使用后效果并不是很理想,主要體現在以下方面:...
摘要:有一天張大胖接到了產品的一個需求,需求中涉及到了小程序和兩端。會后大胖對自己所知道的可以把動態網頁轉成圖片的方案詳細的對比了下相信大家都知道這個,這是一個瀏覽器端的庫,可以把結構轉成圖片。接下來大胖就用了最后的方案,去實施。 有一天張大胖接到了產品的一個需求,需求中涉及到了小程序 和 app 兩端。 主要是基于微信的一個活動,需要在 app 和小程序端生成帶二維碼的圖片,生成圖片是為了...
摘要:有一天張大胖接到了產品的一個需求,需求中涉及到了小程序和兩端。會后大胖對自己所知道的可以把動態網頁轉成圖片的方案詳細的對比了下相信大家都知道這個,這是一個瀏覽器端的庫,可以把結構轉成圖片。接下來大胖就用了最后的方案,去實施。 有一天張大胖接到了產品的一個需求,需求中涉及到了小程序 和 app 兩端。 主要是基于微信的一個活動,需要在 app 和小程序端生成帶二維碼的圖片,生成圖片是為了...
閱讀 834·2019-08-30 14:05
閱讀 1724·2019-08-30 11:08
閱讀 3226·2019-08-29 15:41
閱讀 3602·2019-08-23 18:31
閱讀 1523·2019-08-23 18:29
閱讀 557·2019-08-23 14:51
閱讀 2115·2019-08-23 13:53
閱讀 2135·2019-08-23 13:02