要在 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");
}