首页 > PHP > PHP实现网页截图

PHP实现网页截图

时间:2023-03-09浏览次数:319

要在 PHP 中实现网页截图,可以使用第三方库,例如 PhantomJS 或 wkhtmltoimage。

使用 PhantomJS 实现网页截图

PhantomJS 是一个基于 WebKit 的无界面浏览器,可以用于自动化网页交互、执行 JavaScript、生成 PDF 和截图等。以下是使用 PhantomJS 实现网页截图的示例代码:

<?php
    // 设置 PhantomJS 可执行文件路径
    $phantomjs_path = '/usr/local/bin/phantomjs';
    // 设置截图宽度和高度
    $width = 1024;
    $height = 768;
    // 设置截图保存路径
    $output_file = 'screenshot.png';
    // 设置要截图的网址
    $url = 'https://www.baidu.com';
    // 使用 PhantomJS 执行截图命令
    $cmd = "{$phantomjs_path} rasterize.js {$url} {$output_file} '{$width}x{$height}'";
    exec($cmd);
    // 输出截图
    header('Content-Type: image/png');
    echo file_get_contents($output_file);
?>

上述代码中,我们使用了 PhantomJS 提供的 rasterize.js 脚本来实现网页截图。该脚本会加载指定的网址并将其渲染为图片,然后将图片保存到指定的文件中。

使用 wkhtmltoimage 实现网页截图

wkhtmltoimage 是一个基于 WebKit 的命令行工具,可以将网页转换为图片或 PDF。以下是使用 wkhtmltoimage 实现网页截图的示例代码:

<?php
    // 设置 wkhtmltoimage 可执行文件路径
    $wkhtmltoimage_path = '/usr/local/bin/wkhtmltoimage';
    // 设置截图宽度和高度
    $width = 1024;
    $height = 768;
    // 设置截图保存路径
    $output_file = 'screenshot.png';
    // 设置要截图的网址
    $url = 'https://www.baidu.com';
    // 使用 wkhtmltoimage 执行截图命令
    $cmd = "{$wkhtmltoimage_path} --quality 100 --width {$width} --height {$height} {$url} {$output_file}";exec($cmd);
    // 输出截图
    header('Content-Type: image/png');
    echo file_get_contents($output_file);
?>

上述代码中,我们使用了 wkhtmltoimage 提供的命令行工具来实现网页截图。该工具会加载指定的网址并将其渲染为图片,然后将图片保存到指定的文件中。我们可以通过调整命令行参数来设置截图的质量、宽度、高度等参数。


使用 wkhtmltoimage 实现网页截图的示例代码2:

<?php 

    $url = 'https://www.baidu.com';
    $filename="Uploads/test0010.jpg";
    exec("wkhtmltoimage $url $filename");
    header('Content-Type: image/jpeg');
    echo file_get_contents($filename);

?>

上诉代码中 需安装 先安装:wkhtmltoimage,在设置环境变量。


其他示例代码:

function convert($type='pdf')
        {
            $filename=time();
            $url=$this->input->get("url");
            if($type=='pdf')
            {
                $filename="F:/upload/tmp/".$filename.".pdf";
                exec("F:/home/phptool/wkhtmltopdf-i386 $url $filename");
                header('Content-Type: application/pdf');
            }
            elseif($type=='image')
            {
                $filename="upload/tmp/".$filename.".jpg";
                exec("/home/phptool/wkhtmltoimage-i386 $url $filename");
                header('Content-Type: image/jpeg');
            }
            header('Pragma: public');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Content-Transfer-Encoding: binary');
            header('Content-Length: '.filesize($filename));
            readfile("$filename");
        }