Shell脚本实现获取网页快照并生成缩略图

获取网页快照并生成缩略图可分两步进行:

1、获取网页快照

2、生成缩略图

获取网页快照

这里我们用 phantomjs 来实现。关于 phantomjs 的详细用法可参考官方网站。http://phantomjs.org/

1、安装

我的环境是CentOS6.5,安装时直接下载 tarball 然后解压即可。

代码如下:

# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-i686.tar.bz2

# tar -jxvf phantomjs-1.9.8-linux-i686.tar.bz2

# cp phantomjs-1.9.8-linux-i686/bin/phantomjs /bin/phantomjs

第二步中解压后bin目录下的 phantomjs 二进制文件即是可调用命令。

第三步是为了在以后调用命令时不必输入命令全路径。

2、调用
phantomjs的调用需要一个js脚本。这个js脚本接收两个参数,分别是网址url和快照文件名称filename,脚本snap.js内容如下:

代码如下:

/*
 * desc: get snapshot from url
 * example: phantomjs snap.js http://www.baidu.com baidu.png
 */

var page = require('webpage').create();
var args = require('system').args;

var pageW = 1024;
var pageH = 768;

page.viewportSize = {
  width: pageW,
  height: pageH
};

var url =  args[1];
var filename = args[2];
page.open(url, function (status) {
    if (status !== 'success') {
        console.log('Unable to load ' + url + ' !');
        phantom.exit();
    } else {
        window.setTimeout(function () {
            page.clipRect = { left: 0, top: 0, width: pageW, height: pageH };
            page.render(filename);
            console.log('finish:', filename);
            phantom.exit();
        }, 1000);
    }
});

在这个脚本中还有个小小的设置,就是设置打开页面的浏览器可视区域的大小为1024*768,然后取第一屏内容。

调用命令如下:

代码如下:

phantomjs snap.js http://www.baidu.com baidu.png

注意:这里执行命令的用户需要对目录有写权限。

3、效果

获取的截图如下:

生成缩略图

生成缩略图用的是ImageMagick工具,ImageMagick是个非常强大的图片处理工具,可对图片进行转化(格式转换、缩放、剪切、模糊、反转等)、屏幕截图、图片显示等,详细用法可参考  我的ImageMagick使用心得 一文。

1、安装

redhat系列可使用yum安装:

代码如下:

# yum install ImageMagick ImageMagick-devel

其他平台安装请参考官方网站:http://www.imagemagick.org/script/binary-releases.php,根据你的系统选择相应的包或自己编译源码。

2、调用

我们这里只使用图片缩放工具,语法为:

代码如下:

convert -resize 320x240 baidu.png baidu_thumbnail.png

默认是按比率缩放,如果要强制缩放,可以在尺寸后面加感叹号:

代码如下:

convert -resize 320x240! baidu.png baidu_thumbnail.png

3、效果

生成的缩略图如下:

整合脚本
如果希望将上两步自动化,可以写一个shell脚本实现:

代码如下:

# !/bin/bash
# desc: create snapshot from url
# example: sh createsnap.sh http://www.baidu.com baidu

URL=$1

IMAGE_NAME=$2

SNAPSHOT_NAME="${IMAGE_NAME}.png"

THUMBNAIL_NAME="${IMAGE_NAME}_thumbnail.png"

phantomjs snap.js $URL $SNAPSHOT_NAME

convert -resize 320x240 $SNAPSHOT_NAME $THUMBNAIL_NAME

exit 0

(0)

相关推荐

  • 存取flex屏幕快照

    <?xml version="1.0" encoding="utf-8"?> <!-- http://yecon.blog.hexun.com/31031093_d.html --> <Application name="FileReference_save_test" xmlns="http://ns.adobe.com/mxml/2009" xmlns:mx="library:ado

  • 利用NodeJS和PhantomJS抓取网站页面信息以及网站截图

    利用PhantomJS做网页截图经济适用,但其API较少,做其他功能就比较吃力了.例如,其自带的Web Server Mongoose最高只能同时支持10个请求,指望他能独立成为一个服务是不怎么实际的.所以这里需要另一个语言来支撑服务,这里选用NodeJS来完成. 安装PhantomJS 首先,去PhantomJS官网下载对应平台的版本,或者下载源代码自行编译.然后将PhantomJS配置进环境变量,输入 $ phantomjs 如果有反应,那么就可以进行下一步了. 利用PhantomJS进行简

  • 基于linnux+phantomjs实现生成图片格式的网页快照

    安装扩展:   (1)下面是我在linux上的安装过程,如果没有安装git请先yum install git     安装casperjs 复制代码 代码如下: cd /     git clone git://github.com/n1k0/casperjs.git     cd casperjs     ln -sf /casperjs/bin/casperjs /usr/local/bin/casperjs  //可以忽略 实际执行中php是执行 /casperjs/bin/casperj

  • 使用phantomjs进行网页抓取的实现代码

    phantomjs因为是无头浏览器可以跑js,所以同样可以跑dom节点,用来进行网页抓取是再好不过了. 比如我们要批量抓取网页 "历史上的今天" 的内容.网站 对dom结构的观察发现,我们只需要取到 .list li a的title值即可.因此我们利用高级选择器构建dom片段 var d= '' var c = document.querySelectorAll('.list li a') var l = c.length; for(var i =0;i<l;i++){ d=d+

  • PHP生成网页快照 不用COM不用扩展.

    代码 复制代码 代码如下: <?php $url = 'www.baidu.com'; //抓取百度 echo snapshot($url); //输出结果为图片地址 echo snapshot($url, './baidu.png'); //将图片保存至本地baidu.png, 输出内容图片大小 /** * 生成网页快照 * * @param string $site 目标地址 * @param string $path 保存地址, 为空则不保存 * @param integer $dealy

  • Flex 画面快照截图及显示实现代码

    一.对指定画面进行快照.截图. 在Flex SDK中flash.display包下面有两个类Bitmap和BitmapData.在flex中可以通过两个类对图片进行操作.BitmapData类中有一个draw方法这个方法的第一个参数是进行画面截图的源对象,这个对象必须实现IBitmapDrawable接口.而DisplayObject类实现了这个接口,DisplayObject是所有可见控件的先祖类,也就意味着所有在flex可以看到的画面.控件都可以用draw方法来进行快照截图. 具体的代码如下

  • PHP抓屏函数实现屏幕快照代码分享

    复制代码 代码如下: <?php* 屏幕快照$im = imagegrabscreen();imagepng($im, "myscreenshot.png"); * 抓取一个窗口(IE为例) $browser = new COM("InternetExplorer.Application");$handle = $browser->HWND;$browser->Visible = true;$im = imagegrabwindow($handle

  • Shell脚本实现获取网页快照并生成缩略图

    获取网页快照并生成缩略图可分两步进行: 1.获取网页快照 2.生成缩略图 获取网页快照 这里我们用 phantomjs 来实现.关于 phantomjs 的详细用法可参考官方网站.http://phantomjs.org/ 1.安装 我的环境是CentOS6.5,安装时直接下载 tarball 然后解压即可. 复制代码 代码如下: # wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-i686.t

  • Java远程调用Shell脚本并获取输出信息【推荐】

    1.添加依赖 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId&g

  • 在shell脚本中获取上个月最后一天的日期方法

    linux中用date命令来获取上个月最后一天的日期: $ date -d"`date +%Y%m01` last day" +%Y%m%d 20161231 编写脚本getdate.sh: #! /bin/sh nowdate=`date +%Y%m01` #本月第一天 startdate=`date -d"$nowdate last month" +%Y%m%d` #上个月第一天 enddate=`date -d"$nowdate last day&q

  • Linux Shell脚本中获取本机ip地址方法

    方法一:ifconfig -a ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" 命令解析 ifconfig -a  和window下执行此命令一样道理,返回本机所有ip信息 grep inet                  截取包含ip的行 grep -v 127.0.0.1      去掉本地指向的那行 grep -v inet6             去掉

  • shell 脚本中获取命令的输出的实现示例

    这个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值. 通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作. 比较常用的一种方式就是, 匹配命令输出的内容中是否存在某些关键字,选择执行的不同动作.比较常用的一种方式就是采用反向单引号的方式 --  保存结果的变量名=`需要执行的linux命令` 这种方式在使用时,有些细节的地方需要注意. 先用几个例子来说明一下. 比如在CentOS7环境中,使用rpm -qa命令查询某些rpm包是否安装,

  • Shell脚本中获取进程ID的方法

    提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中的子shell的PID.这个PID信息可以在不同的情况下使用.比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件.有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身

  • Shell脚本中获取本机ip地址的3个方法

    方法一: 复制代码 代码如下: /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" or /sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p' 方法二: 复制代码 代码如下: local_host="`hostname --fqdn`" local_i

  • 用shell脚本在mysql表中批量插入数据的方法

    很多时候需要在mysql表中插入大量测试数据,下面分享一个用shell脚本通过while循环批量生成mysql测试数据的方法,你只需要根据你自己的表结构来生成sql语句即可. 复制代码 代码如下: #!/bin/bash i=1;MAX_INSERT_ROW_COUNT=$1;while [ $i -le $MAX_INSERT_ROW_COUNT ]do    mysql -uroot -proot afs -e "insert into afs_test (name,age,createTi

  • 分享70个经典的 Shell 脚本面试题与答案

    我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能. 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1.txt cat show.sh #!/bin/bash echo $1 (LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之.

  • Shell脚本生成随机密码的若干种可能

    1.生成随机密码(urandom版本) #!/bin/bash #Author:丁丁历险(Jacob) #/dev/urandom文件是Linux内置的随机设备文件 #cat /dev/urandom可以看看里面的内容,ctrl+c退出查看 #查看该文件内容后,发现内容有些太随机,包括很多特殊符号,我们需要的密码不希望使用这些符号 #tr -dc '_A-Za-z0-9' </dev/urandom #该命令可以将随机文件中其他的字符删除,仅保留大小写字母,数字,下划线,但是内容还是太多 #我们

随机推荐