音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
日期:2021-09-06 20:38:38   来源:脚本之家

本文实例讲述了Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能。分享给大家供大家参考,具体如下:

最近在开发一个本地互联网应用的项目,为了增加用户体验,需要在搜索结果左侧显示如图一所示的某个网站的缩略图效果,在网上不停地百度谷歌了一上午后,发现大多数实现少量截图还是可以的,如果大批量的截图总会在中途出现很多问题,最终也没有发现十分满意的程序,干脆自己弄吧。

(图一)

下面是在windows环境下用php结合iecapt实现的网页截图并创建缩略图的步骤和代码:

一、准备

下载最新版IECapt

官方地址:http://iecapt.sourceforge.net/

在linux环境下,可以考虑用HTML2Image来实现

下载地址:http://www.guangmingsoft.net/htmlsnapshot/html2image.i386.tar.gz

其它的实现方式还有CutyCapt,另外,只要是windows环境,有IE浏览器(推荐使用IE7)即可,这个大部分机器都应该不是问题。

二、创建数据表(这一步非必须,根据实际情况选用)

因为要批量截图,数据十分的多,建立一个数据表来存放要截图的网站的url地址还是有必要的,如下所示(mysql数据库表):

CREATE TABLE IF NOT EXISTS `t_url` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `url` varchar(100) NOT NULL,
 `pictype` tinyint(1) unsigned NOT NULL COMMENT '1.非比例缩略图2比例缩略图
 `flag` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0.禁用1.可用
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='url链接表' AUTO_INCREMENT=1 ;

三、创建批处理文件

1.首先把下载的iecapt压缩包解压,然后把iecapt.exe放到要生成截图的文件夹下(如:img_tmp)。

为了便于理解,在看下面代码前,先创建一个test.bat文件,鼠标右击编辑,写入一句话if not exist ay360cn.jpg (iecapt.exe --url=http://www.ay360.cn/ --out=ay360cn.jpg)保存,双击运行test.bat看看是否会在本目录下多出一个名叫ay360cn.jpg的文件,如果看到说明截图成功,这句话是截图的核心语句。

2.将需要截图的url链接导入url链接表t_url,然后执行如下php代码:

<?php
//------------------------------------------------------------
//从表t_url中提取url链接,存放到数组$data中
//--------------------------------------------------------------
mysql_connect("localhost","root","123");
mysql_select_db("test");
$sql = "select * from t_url";
//选用sql语句$sql2 = "select * from t_url where pictype = 1 and flag = 1";
$query = mysql_query($sql);
//------------------------------------------
//生成批处理文件
//------------------------------------------
$expire_time = 10;  //代表10天,文件过期时间,86400秒/天
$i = 0;
foreach($row = mysql_fetch_array($query)){
 $url_md5 = md5($row['url']);
 $file_folder = 'img/';
 $filename = $file_folder.$url_md5.'.'.'jpg';
 $newname = $url_md5.'.'.'jpg';
 if (!file_exists($filename) || (filemtime ($filename) + $expire_time * 86400 < time()) ) {
    $str .= "if not exist ".$newname." (iecapt.exe --url=".$value['url']." --out=".$newname.")\r\n";
    if(($i % 30) == 0 && $i > 0){   //每30条为一个批处理文件
       $title = "title capt".$i.".bat\r\n";
       $str = $title.$str;
       $file_bat = fopen("img_tmp/capt".$i.".bat","w");
       if(fwrite($file_bat,$str)){
        echo "批处理文件capt".$i."生成成功<br>";
        $str = "";
       }
    }
    $i = $i+1;
 }
}
?>

运行结果:

(图二)

四、执行批处理文件

可以通过php程序循环执行 批处理文件,但在运行当中会出现很多问题,这里手动直接批量打开上面刚创建好的批处理文件,考虑到带宽和cpu,最多不要超过20个,截图的速度大约3-5秒/张效果如图三:

(图三)

五、创建缩略图

  生成缩略图的文件是create_image_img.php,其中包含生成缩略图的主要的一个类文件是image.class.php,两个文件的代码如下:

ceate_image_img.php代码:

<?php
mysql_connect("localhost","root","123456");
mysql_select_db("test");
if(!isset($_GET['ID'])){
 $_GET['ID'] = 1;
}
if($_GET['ID']){
 $sql = "select * from t_url id =".$_GET['ID'];
 $query = mysql_query($sql);
 $row = mysql_fetch_array($query);
 echo "<span style='color:#CE0000;'>正在生成缩略图:</span>".$row['id']."&nbsp;".$row['url']."<br><br>";
  $url = $row['url'];
  $url_md5 = md5($url);
  $pictype = $row['pictype'];
  $limit_time = 1;                         //创建 $limit_time日内创建的大图,天
  $thumbnails_folder = 'img_tmp/';             //保存临时大图的目录,必须以/结束
  $thumbnails_folder2 = 'img/';               //保存小图的目录,必须以/结束
  $output_format = 'jpg';
  $cached_filename = $thumbnails_folder.$url_md5.".".$output_format;
  $to_filename = $thumbnails_folder2 .$url_md5.'.'.$output_format;
    if((file_exists($cached_filename) || filemtime ($filename) + $limit_time*86400 > time())
     && !file_exists($to_filename)){
     if (filesize($cached_filename) > 1024){ //字节,不能是空白图片
       //创建缩略图
        include("image.class.php");
        $img = new Zubrag_image;
        // get parameters
        $img->image_type  = 2; // 1 = GIF, 2 = JPG, 3 = PNG
        $img->quality   = 80;
        $img->max_w    = 90;
        $img->max_h    = 67;
        $img->iscapt = ($pictype == 1) ? true : false; //此处用布尔型即可,数据库不可1.非比例缩略图2.按比例缩略
        if($img->GenerateThumbFile($cached_filename, $to_filename)){
         echo "<span style='color:#CE0000;'>成功创建缩略图:</span>".$row['id']."&nbsp;".$row['url'];
        }else{
         echo "<span style='color:#0000CE;'>未能创建缩略图:</span>".$row['id']."&nbsp;".$row['url'];
        }
      }
    }
 $sql = "select * from t_url id >".$_GET['ID']." and flag = 1 order by id asc limit 1";
 $query = mysql_query($sql);
 $row = mysql_fetch_array($query);
 echo "<br><span style='color:#0000CE;'>准备生成缩略图:</span>".$row['id']."&nbsp;".$row['url']."<br><br>";
 if($row['id']){
  echo "<script>window.location.href='create_image_img.php?ID=".$row['id']."';</script>";
 }else{
  $_GET['ID'] = "";
 }
}
?>

image.class.php代码:

<?php
class Zubrag_image {
 var $iscapt = true;
 var $image_type = -1;
 var $quality = 100;
 var $max_w = 100;
 var $max_h = 100;
 function SaveImage($im, $filename) {
  $res = null;
  if(($this->image_type == 1) && !function_exists('imagegif')) $this->image_type = 3;
  switch ($this->image_type) {
   case 1:
    //if ($this->save_to_file) {
     $res = ImageGIF($im,$filename);
    //}
    //else {
    // header("Content-type: image/gif");
    // $res = ImageGIF($im);
    //}
    break;
   case 2:
     $res = ImageJPEG($im,$filename,$this->quality);
    break;
   case 3:
     $res = ImagePNG($im,$filename);
    break;
  }
  return $res;
 }
 function ImageCreateFromType($type,$filename) {
   $im = NULL;
   switch ($type) {
    case 1:
     $im = ImageCreateFromGif($filename);
     break;
    case 2:
     $im = ImageCreateFromJpeg($filename);
     break;
    case 3:
     $im = ImageCreateFromPNG($filename);
     break;
  }
  return $im;
 }
 function GenerateThumbFile($from_name, $to_name) {
  list($orig_x, $orig_y, $orig_img_type, $img_sizes) = GetImageSize($from_name);
  /*if ($this->cut_x > 0) $orig_x = min($this->cut_x, $orig_x);
  if ($this->cut_y > 0) $orig_y = min($this->cut_y, $orig_y);*/
    if ($this->iscapt && (($orig_y/$orig_x) > (90/67))) { //是截图,且高度过高
     $orig_y = $orig_x*(67/90);
    }
  $this->image_type = ($this->image_type != -1 ? $this->image_type : $orig_img_type);
  if ($orig_img_type < 1 or $orig_img_type > 3) die("Image type not supported");
  if ($this->image_type == 1) {
   $ni = imagecreate($this->max_w, $this->max_h);
  }
  else {
   $ni = imagecreatetruecolor($this->max_w,$this->max_h);
  }
  $white = imagecolorallocate($ni, 255, 255, 255);
  imagefilledrectangle( $ni, 0, 0, $this->max_w, $this->max_h, $white);
  $im = $this->ImageCreateFromType($orig_img_type,$from_name);
  imagepalettecopy($ni,$im);
  imagecopyresampled(
   $ni, $im,
   0, 0, 0, 0,
   $this->max_w, $this->max_h,
   $orig_x, $orig_y);
  if($this->SaveImage($ni, $to_name)){
     return true;
  }else{
     return false;
  }
 }
}
?>

六、总结

至此整个实现网页截图并创建缩略图的的步骤结束,其中执行批处理文件部分为了提高截图效率采用手动的方式,批量打开批处理文件,另外,链接数据库部分还可以用封装的数据库操作类来实现,代码会更加简洁。

希望本文所述对大家PHP程序设计有所帮助。

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程