最新公告
  • 欢迎您光临吆喝资源网,本站提供站长亲测的网站源码下载,打造专业的源码网!立即加入我们
  • php如何调用phantomJS截图

    推荐:《PHP视频教程》

    php调用phantomJS截图

    • 知识储备

    *unix系统安装phantomjs,权限相关知识

    基本JavaScript语法知识

    php exec函数调用REPL phantomjs

    phantomjs js截图文档 http://javascript.ruanyifeng.com/tool/phantomjs.html

    • 代码(php 代码环境为yii2框架)

    <?php
    namespace weapp/library/phantomjs;
    use weapp/library/BizException;
    class ScreenShot
    {
        /** @var string 获取phantomjs 参数中 js文件的决定路径 */
        private $js_path;
        /** @var bool|string 获取php 有777权限的临时文件目录 */
        private $temp_dir;
        function __construct()
        {
            $dir = __DIR__;
            $this->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 = "/usr/local/bin/phantomjs {$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截图的详细内容,更多请关注吆喝资源网其它相关文章!

    本文转自PHP中文网,吆喝网(http://yaoohe.com)搜集整理,如有疑问请联系本站客服!

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"yaoohe.com",如遇到无法解压的请联系管理员!
    8. 特别声明:本站源码除标明“已测试”外,其它都未测试,有BUG概本站概不负责。
    吆喝资源网 » php如何调用phantomJS截图

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    吆喝资源网
    一个高级程序员模板开发平台

    发表评论

    • 1116会员总数(位)
    • 9344资源总数(个)
    • 333本周发布(个)
    • 5 今日发布(个)
    • 239稳定运行(天)

    专业的网站源码网,提供精品php网站源码下载,小程序源码下载等!!

    小程序源码 了解详情
    升级SVIP尊享更多特权立即升级