現在、ユーザー エクスペリエンスを向上させるために、検索結果の左側に Web サイトのサムネイル効果を表示する必要があります。インターネットで朝からBaiduとGoogleを調べてみましたが、ほとんどのスクリーンショットはまだ撮影できており、大量のスクリーンショットを撮ると途中で多くの問題が発生します。とても満足のいくプログラムを見つけたので、自分で作ってみようと思います。
(写真1)
Windows環境でphpとiecaptを組み合わせてWebページのスクリーンショットを撮り、サムネイルを作成する手順とコードは次のとおりです:
1. IECaptの最新バージョンをダウンロードします。
公式アドレス:http://iecapt.sourceforge.net/
Linux環境では、それを実現するためにHTML2Imageの使用を検討できます
ダウンロードアドレス: http://www.guangmingsoft.net/htmlsnapshot/html2image.i386 .tar.gz
その他の実装方法としては、CutyCapt などがあります。また、Windows 環境で IE ブラウザ (IE7 を推奨) を備えている限り、ほとんどのマシンでは問題になりません。
2. データテーブルを作成します (このステップは必要ありません。実際の状況に応じて選択してください)
スクリーンショットをバッチ処理するには大量のデータがあるため、URL アドレスを保存するデータテーブルを作成する必要があります。スクリーンショットとなる Web サイトを次のように表示します (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 ;
3. バッチ ファイルを作成します
1.まず、ダウンロードした iecapt 圧縮パッケージを解凍し、iecapt.exe をスクリーンショットを生成するフォルダー (img_tmp など) に置きます。
理解を容易にするために、次のコードを見る前に、まず test.bat ファイルを作成し、右クリックして編集し、存在しない場合は文を書き込みます ay360cn.jpg (iecapt.exe --url=http:/ /www.ay360 .cn/ --out=ay360cn.jpg) 保存し、ダブルクリックして test.bat を実行し、このディレクトリに ay360cn.jpg という名前の追加ファイルがあるかどうかを確認します。スクリーンショットが成功した場合は、この文はスクリーンショットの核となるステートメントです。 ... バッチファイルはループで実行されますが、運用中に多くの問題が発生します。ここでは、帯域幅と CPU を考慮して、最大 20 個までのバッチ ファイルを手動で開きます。スクリーンショットの速度は約 3 ~ 5 秒です。効果は図 3 に示されています。
(図 3)5. サムネイルを作成します
サムネイルを生成するファイルは create_image_img.php で、これには次のメイン クラス ファイルが含まれています。生成されるサムネイルは image.class.php です。 2 つのファイルのコードは次のとおりです:
1 <?php 2 3 //------------------------------------------------------------ 4 //从表t_url中提取url链接,存放到数组$data中 5 //-------------------------------------------------------------- 6 7 mysql_connect("localhost","root","123"); 8 mysql_select_db("test"); 9 $sql = "select * from t_url";10 //选用sql语句$sql2 = "select * from t_url where pictype = 1 and flag = 1";11 12 $query = mysql_query($sql); 13 14 //------------------------------------------15 //生成批处理文件16 //------------------------------------------17 18 $expire_time = 10; //代表10天,文件过期时间,86400秒/天19 $i = 0;20 foreach($row = mysql_fetch_array($query)){21 $url_md5 = md5($row['url']);22 $file_folder = 'img/';23 $filename = $file_folder.$url_md5.'.'.'jpg';24 $newname = $url_md5.'.'.'jpg'; 25 26 if (!file_exists($filename) || (filemtime ($filename) + $expire_time * 86400 < time()) ) { 27 28 $str .= "if not exist ".$newname." (iecapt.exe --url=".$value['url']." --out=".$newname.")\r\n"; 29 30 if(($i % 30) == 0 && $i > 0){ //每30条为一个批处理文件31 $title = "title capt".$i.".bat\r\n";32 $str = $title.$str; 33 $file_bat = fopen("img_tmp/capt".$i.".bat","w"); 34 35 if(fwrite($file_bat,$str)){36 echo "批处理文件capt".$i."生成成功<br>";37 $str = "";38 } 39 } 40 $i = $i+1;41 } 42 } 43 ?>
1 <?php 2 mysql_connect("localhost","root","123456"); 3 mysql_select_db("test"); 4 5 6 if(!isset($_GET['ID'])){ 7 $_GET['ID'] = 1; 8 } 9 10 if($_GET['ID']){ 11 $sql = "select * from t_url id =".$_GET['ID'];12 $query = mysql_query($sql);13 $row = mysql_fetch_array($query); 14 15 echo "<span style='color:#CE0000;'>正在生成缩略图:</span>".$row['id']." ".$row['url']."<br><br>"; 16 17 $url = $row['url']; 18 $url_md5 = md5($url);19 $pictype = $row['pictype']; 20 21 $limit_time = 1; //创建 $limit_time日内创建的大图,天22 $thumbnails_folder = 'img_tmp/'; //保存临时大图的目录,必须以/结束23 $thumbnails_folder2 = 'img/'; //保存小图的目录,必须以/结束 24 $output_format = 'jpg'; 25 $cached_filename = $thumbnails_folder.$url_md5.".".$output_format;26 27 $to_filename = $thumbnails_folder2 .$url_md5.'.'.$output_format; 28 29 if((file_exists($cached_filename) || filemtime ($filename) + $limit_time*86400 > time())30 && !file_exists($to_filename)){ 31 32 if (filesize($cached_filename) > 1024){ //字节,不能是空白图片33 //创建缩略图34 include("image.class.php");35 $img = new Zubrag_image; 36 37 // get parameters38 $img->image_type = 2; // 1 = GIF, 2 = JPG, 3 = PNG39 $img->quality = 80;40 $img->max_w = 90;41 $img->max_h = 67;42 $img->iscapt = ($pictype == 1) ? true : false; //此处用布尔型即可,数据库不可1.非比例缩略图2.按比例缩略 43 44 if($img->GenerateThumbFile($cached_filename, $to_filename)){ 45 echo "<span style='color:#CE0000;'>成功创建缩略图:</span>".$row['id']." ".$row['url']; 46 }else{ 47 echo "<span style='color:#0000CE;'>未能创建缩略图:</span>".$row['id']." ".$row['url'];48 } 49 } 50 } 51 52 $sql = "select * from t_url id >".$_GET['ID']." and flag = 1 order by id asc limit 1";53 $query = mysql_query($sql);54 $row = mysql_fetch_array($query); 55 56 echo "<br><span style='color:#0000CE;'>准备生成缩略图:</span>".$row['id']." ".$row['url']."<br><br>"; 57 58 if($row['id']){ 59 echo "<script>window.location.href='create_image_img.php?ID=".$row['id']."';</script>";60 }else{61 $_GET['ID'] = "";62 } 63 } 64 65 ?>
6. まとめ
これで、Web ページのスクリーンショットを取得してサムネイルを作成するステップ全体が完了しました。バッチ ファイルの実行部分では、スクリーンショットの効率を向上させるために、バッチ ファイルをバッチで開くために手動の方法が使用されます。リンク部分は、カプセル化されたデータベース操作クラスを使用して実装することもでき、コードはより簡潔になります。