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