2011年8月 的存档

ImageMagick之图片裁剪

2011年8月31日 没有评论

imagemagick的convert命令通过crop参数,可以把一幅大图片分成若干块大小一样的图片,同时也可以在大图上截取一块图片来。命令格式为

convert 原始图片 -crop widthxheight+x+y 目标图片

其中widthxheight是目标图片的尺寸,+x+y是原始图片的坐标点,这两组值至少要出现一组,也可以同时存在。另外该命令也可使用gravity来重新定义坐标系统。关于更多gravity的信息,请参考:ImageMagicK之gravity参数详解。下面介绍几种常用的命令。

  • 把原始图片分割成多张小图
convert src.jpg -crop 100x100 dest.jpg

假设src.jpg的大小是300x200,执行命令后将得到名为dest-0.jpg、dest-1.jpg...dest-5.jpg
的6张大小为100x100的小图片。注意如果尺寸不是目标图片的整数倍,那么右边缘和下边缘的一部分图片就用实际尺寸
  • 在原始图片上剪裁一张指定尺寸的小图
convert src.jpg -crop 100x80+50+30 dest.jpg
在原始图片的上距离上部30像素左部50为起点的位置,分别向左向下截取一块大小为100x80的图片。如果x相对于坐标,宽度不够100,那就取实际值。

convert src.jpg -gravity center -crop 100x80+0+0 dest.jpg
在原始图上截取中心部分一块100x80的图片

convert src.jpg -gravity southeast -crop 100x80+10+5 dest.jpg
在原始图上截取右下角距离下边缘10个像素,右边缘5个像素一块100x80的图片

centos下搭建apache+svn服务器

2011年8月31日 没有评论

本文将详细介绍centos5如何搭建svn服务器。包括apache,subversion的安装和一些简单的配置。

  • 安装Apache HTTP Server

apache下载地址:http://www.apache.org/dist//httpd/httpd-2.2.20.tar.gz

通过tar -zxvf httpd-2.2.20.tar.gz 解压,进入解压后的文件夹,执行

./configure --enable-dav --enable-so --prefix=/usr/local/apache2

其中,–enable-dav允许Apache提供DAV协议支持;–enable-so允许运行时加载DSO模块,前两个参数是必须要加的,–prefix 是安装的位置。如果configure通过,接着执行

make && make install

数分钟后就完事了,通过 /usr/local/apache2/bin/apachectl -k start 来启动,在浏览器中访问127.0.0.1,如果出现 It’s Works!,那么说明安装成功。

  • 安装Subversion
  • Subversion
Subversion需要需要下载两个文件subversion-1.6.17.tar.bz2和subversion-deps-1.6.17.tar.bz2,它们的下载地址是
http://subversion.tigris.org/downloads/subversion-1.6.17.tar.bz2
http://subversion.tigris.org/downloads/subversion-deps-1.6.17.tar.bz2

分别解压subversion-1.6.17.tar.bz2和subversion-deps-1.6.17.tar.bz2,解压后他们都在subversion-1.6.17这个文件夹下,然后执行configure,命令如下

./configure --with-apxs=/opt/apache2/bin/apxs --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --prefix=/usr/local/subversion-1.6.7

其中,–with-apxs 用于生成apache httpd的mod_dav_svn和mod_authz_svn模块;–with-apr 和 –with-apr-util=参数指向 Apache 的安装根目录,而不是使用缺省的 SVN 安装包中自带的 apr ,否则如果你安装的 Apache 版本不同有可能导致 APR 库不匹配,出现类似 Can’t set position pointer in file ‘/svn/test/db/revs/1′: Invalid argument 的错误,–prefix 是安装的位置。中间可能会出现某些库找不到的情况,根据提示用yum来搞定。configure成功后,执行编译和安装,即

make && make install

如果没有报错,svn就成功安装好了。对于版本1.8+,可能需要通过如下命令把对应 so 文件 copy 到apache 目录。

cp subversion/mod_authz_svn/.libs/mod_authz_svn.so /usr/local/apache/modules/
cp subversion/mod_dav_svn/.libs/mod_dav_svn.so /usr/local/apache/modules/
  • 如何创建的Subversion的版本库

假设我们把版本库建立在/opt/svnroot 目录下,那么在/opt/svnroot目录下执行mkdir repository新建版本库文件夹,通过svnadmin create repository/test命令可创建名为test的版本库。若创建成功,则subversion的安装便已成功完成。使用mkdir -p import/{trunk,branches,tags} 命令在/opt/svnroot目录下建立一个名为import的新文件夹,包含trunk、branches、tags 三个子目录。下面这条语句将把路径/opt/svnroot/import下的目录和文件导入到你创建的Subversion 仓库中去,提交后的修订版为1。

svn import /opt/svnroot/import file:///opt/svnroot/repository/test -m "Init repository"

这里/opt/svnroot/import可以使用相对路径,但file:///opt/svnroot/repository/test必须以绝对路径表示。

分类: Linux 标签: , , ,

IE下css的hack代码

2011年8月31日 没有评论

利用hack技术可以为不同的浏览器设置不同的值。例如代码:

.test {
    margin-top:10px;	/*所有浏览器*/
    margin-top:5px\9;	/*所有IE浏览器*/
    *margin-top:0px;	/*IE6、7*/
    _margin-top:-10px;	/*IE6*/
}

css的顺序很重要,后面的会覆盖前面设置。。所以以上代码在Firefox下margin-top的值为10px,IE8下可以识别第一条和第二条,但第二条会覆盖第一条,故就变为5px,同理IE7下则为0px,IE6下为-10px。

综上所述,符号[\9]所有IE浏览器可识别、[*]IE6、7 能识别、[_]只有IE6下能识别。

分类: web前端 标签: ,

nginx下wordpress的伪静态配置

2011年8月31日 没有评论

本来起初自己在nginx来配置转发规则,但有些连接转发有问题,后来在网上查了一下,原来借助nginx的try_files指令,只需要一行配置就可以搞定伪静态配置了。代码如下:

try_files $uri $uri/ /index.php?q=$uri&$args;

更多关于try_files的知识,参看:http://wiki.nginx.org/NginxHttpCoreModule#try_files

分类: Linux 标签: , ,

ImageMagick之图片缩放

2011年8月30日 没有评论

利用ImageMagicK的convert命令,能很方便的实现图片的放大缩小,可以进行等比例缩放,也能缩放到指定的固定大小。缩放的参数resize,由它来指定缩放后图片的宽高,比如“200×100”。

  • 等比缩放 例如把图片a.jpg缩放到200×100的尺寸,可以用命令:
convert -resize 200×100 src.jpg dest.jpg

注意:虽然明确指定了图片大小为200×100,但dest.jpg的不一定就是200×100,因为是等比缩放的,dest.jpg大小取决原始图片比例。假设src.jpg的大小是500×200,那么缩放后dest.jpg的真实大小为200×80,再比如src.jpg的大小是300×200,缩放后的尺寸为150×100。原则是缩放后的尺寸最少有一个是符合宽或高,且另外一个不能大于指定的参数中对应的宽或高。另外可以通过只指定宽或高的方式来进行缩放。例如:

convert -resize 200 src.jpg dest.jpg
得到图片宽为200,高根据原始图片比例计算而来

convert -resize x100 src.jpg dest.jpg
得到的图片高位100,宽根据原始图片比例计算而来
  • 固定宽高缩放。即不考虑原是图宽高的比例,把图片缩放到指定大小。例如命令:
convert -resize 200x100! src.jpg dest.jpg

说明:区别是宽高后面多了一个叹号,此时不管原图片比例如何,缩放后的图片大小都是200×100,这样就可能导致图片变形。注意:在linux环境对参数需要用单引号引起来,而windows下又不能使用单引号。

  • 有条件缩放。可以通过>或<符号来控制原始图片是否进行缩放,例如在处理一批尺寸大小各异的图片,只想把尺寸大于给定的值图片才进行缩小,如果没有指定条件,可能会把那些小的图片进行了放大处理。
convert -resize "200x100>" src.jpg dest.jpg
注解:只有当src.jpg的宽大于200或高大于100时候,才进行缩小处理,
否则生成的dest.jpg和src.jpg具有一样的尺寸。
注意在linux下要用单引号替换成双引号,即'200x100>'。

convert -resize "200x100<" src.jpg dest.jpg
注解:只有当src.jpg的宽小于200或高小于100时候,才进行放大处理,
否则生成的dest.jpg和src.jpg具有一样的尺寸。
注意在linux下要用单引号替换成双引号,即'200x100<'

上述两种有条件缩放是按原始图等比例缩放的,也就是对符合条件的图片进行等比缩放。同时有条件缩放也可以与固定大小缩放联合起来用。例如如下命令。

convert -resize "800x100>!" src.jpg dest.jpg
注解:假设src.jpg尺寸是300x200。很显然src.jpg的高(200)是大于指定值高(100),
符合缩小的条件,由于执行的不是等比缩放,
所以dest.jpg的尺寸理论上是800x100,由于执行是缩小操作
显然800是超过原始图片宽的,故dest.jpg的宽只能是300

convert -resize "10x1000<!" src.jpg dest.jpg
注解:假设src.jpg尺寸是300x200,src.jpg的高(200)小于指定值高(1000),
因此该命令将执行放大图片操作,dest.jpg的高将放到到1000,
由于目标图片宽比原始图片还小,但是执行的是放大操作,因此只能用原始图片的宽,
所以得到的dest.jpg的尺寸是300x1000。

javascript读写cookie实例

2011年8月29日 没有评论

Cookie是网站存放在客户端的一小段数据。一般的,网站为了提升用户体验,在客户的客户端中保存用户的历史信息,以备用户再次访问时网站能提供 更方便,更有针对性的服务。比如,网站可以记住你的登录状态,只要登录一次下次访问就不用在登录;购物网能记住你浏览过的产品,保留你购物车中的物品。这 些都有Cookie的功劳。

cookie的存取操作不止局限于服务器段,客户端通过javascript也一样可以进行cookie的存取。利用document.cookie对象就能操作了。下面分别给出读写cookie的方法示例代码。

function getCookie(name){
    var arr = document.cookie.match(new RegExp("(^| )" 
                                   + name + "=([^;]*)(;|$)"));
    if(arr != null) return (arr[2]);
    return null;
}

document.cookie就是以key/value的形式返回所有对于当前页面有权限读取的cookie字符串,然后通过正则表达式查询参数指定cookie名的cookie值。

function setCookie (name, value, expire) {
    var expireStr = '';

    if (expire || expire > 0) {
        var exp  = new Date();
        exp.setTime(exp.getTime() + expire * 1000);

        expireStr = ';expires=' + exp.toGMTString();
    }

    document.cookie = name + '=' + value +  
                      '; path=/;' + expireStr + 
                      'domain=.youdomain.com';
}

注意setCookie中的第三个参数,是指定cookie的过期时间,单位为秒,如果不指定或者值不大于0,那么写入的cookie类型为会话cookie,即浏览器关闭后,cookie就失效,反正就是硬盘cookie,会记录在客户端的电脑上。

解决第三方cookie的存取问题

2011年8月29日 没有评论

何为第三方cookie呢,简单来说,就是用户当前浏览的页面上有通过IFRAME、IMG或script等标签嵌入另外一个域名的链接地址,该链接设置的cookie就称为第三方cookie,当前页面设置的cookie为第一方cookie。由于隐私保护的问题,现在主流的浏览器默认是不允许写入第三方cookie的,但是只要在相应的Header信息设置了P3P,第三方cookie还是能正常的写入的。

例如在php中通过下面的代码就能正确的写入一个名为thirdcookie的cookie。

header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);

header(“Set-Cookie: “thirdcookie=cookievalue;domain=.youdomian.com;path=/;expires=” . gmstrftime(“%A, %d-%b-%Y %H:%M:%S GMT”, time() + (86400 * 365 * 3)));

需要注意的是即使设置了P3P,只有通过服务器端的操作才能写入cookie,客户端方用javascript的方法也依然无法写入cookie,而且在IE6下javascript也无法读取到第三方cookie。关于javascript读写cookie的详细信息,请参阅 javascript读写cookie实例

结束PPAP.exe进程

2011年8月28日 没有评论

最近发现电脑什么事都没有干,但是无线网络的指示灯有时候会不停的闪动,说明有网络数据传输,通过任务管理器发现了一个比较奇怪的进程,就是PPAP.exe,google一把,原来是pplive的网络加速器,它就是传输数据的元凶。只要使用过pplive,PPAP.exe会一直留在后台,哪怕是关闭了pplive。由于PPAP.exe后台偷偷的传输数据,可能会影响到正常的上网。网上搜索了一下,也没有发现很好解决方法,决定自己动手,丰衣足食,写了一个干掉PPAP.exe进程批处理文件,就放在桌面上,有事没事双击它一下。批处理的内容很简单,就是使用taskkill 命令来干掉指定的进程,如下:

taskkill /F /IM PPAP.exe /T

建立批处理的步骤是,先在桌面上建立一个空白的文本文件,把上面的内容复制粘贴到该文件中,保存退出,然后重命名刚才的文本文件,例如叫“kill_ppap.bat”,双击该文件就可以干掉那该死的流氓进程了。注意:如果双击是记事本打开的,原因就是刚才重命名并没有更改掉文件的扩展名,你可能需要修改一下文件的显示状态,打开任意一个文件夹,然后找到菜单栏里的工具–>文件夹选项–>查看–>高级设置,找到隐藏已知文件类型的扩展名,把其前面的勾去掉,然后确定即可,这个时候你应该看到刚才的文件全名是kill_ppap.bat.txt,去掉后面的.txt即可。

下载地址:kaill-ppap

分类: 其它 标签: , ,

apache配置中ProxyPassReverse指令的含义

2011年8月27日 没有评论

apache中的mod_proxy模块主要作用就是进行url的转发,即具有代理的功能。应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能。

例如使用apache作为域名www.test.com代理服务器,让其暴露在公网上,即DNS解析到本机器上,真正提供web服务器的是另一台位于同一内网的机器上,假设起IP是192.168.100.22,那么只需要如下配置就可以了。

ProxyPass / http://192.168.100.22/

ProxyPassReverse / http://192.168.100.22/

ProxyPass 很好理解,就是把所有来自客户端对http://www.test.com的请求转发给http://192.168.100.22上进行处理,ProxyPassReverse 的配置总是和ProxyPass 一致,但用途很让人费解。似乎去掉它很能很好的工作,事实真的是这样么,其实不然,如果响应中有302重定向,ProxyPassReverse就派上用场。举例说明,假设用户访问http://www.test.com/exam.php,通过转发交给http://192.168.100.22/exam.php处理,假定exam.php处理的结果是实现redirect到login.php(使用相对路径,即省略了域名信息),如果没有配置反向代理,客户端收到的请求响应是重定向操作,并且重定向目的url为http://192.168.100.22/login.php ,而这个地址只是代理服务器能访问到的,可想而知,客户端肯定是打不开的,反之如果配置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为http://www.test.com/login.php,即是在原请求之后追加上了redirect的路径。当客户端再次请求http://www.test.com/login.php,代理服务器再次工作把其转发到http://192.168.100.22/login.php。

客户端到服务器称之为正向代理,那服务器到客户端就叫反向代理。

利用ImageMagicK给图片加水印

2011年8月27日 2 条评论

现在很流行给自己网站的图片加上水印,水印可能是文字,也可能是网站的logo等。图片水印比较简单,就是把自己水印图标合成到原始图片上;文字水印中如果字符包含中文,处理就稍微麻烦一些。

图片水印处理

假设把名为logo.gif的水印图标添加在原始图片(src.jpg)右下角,且水印的下边缘距原始图片10像素、右边缘距原始图片5像素。使用如下命令即可:

convert src.jpg logo.gif -gravity southeast -geometry +5+10 -composite dest.jpg

文字水印处理

如果不含中文字符,可以直接通过convert draw text的方式将文字添加到图片,否则就需要使用其它的办法。命令行中不能包括中文字符,但是能通过读取文件的方式来操作,即先把中文信息保存文本文件中。注意:文本文件的编码最好用UTF-8,同时也需要选取一个支持中文的字体。直接把文本文本中的信息输出到图片上使用命令mogrify,不过也可以使用convert命令把文本文件中的信息生成一个图片,然后再把图片合成到原始图片中。下面分别介绍这几种方法。

  • 不含中文字符:例如把www.netingcn.com作为水印加上图片上,命令如下

convert src.jpg -gravity southeast -fill black -pointsize 16 -draw "text 5,5 'http://www.netingcn.com'" dest-c.jpg

mogrify -pointsize 16 -fill black -weight bolder -gravity southeast -annotate +5+5 "http://www.netingcn.com" src.jpg

说明:上述两条命令达到同样的结果,但是第一次命令可以保留原始图片,第二条是直接在原始图片上打上水印。

  • 存在中文的情况:假设存有信息的文件叫t.txt,字体文件是msyh.ttf。

方法1:
//把文件t.txt中的信息生成图片txt.png, -transparent white让图片的背景透明,-size x30设置图片的高度
convert -transparent white -font msyh.ttf -fill black -pointsize 24 label:@t.txt txt.png
//把txt.png合成到src.jpg上
convert src.jpg txt.png -gravity southeast -geometry +10+5 -composite dest.jpg

方法2:
convert src.jpg -transparent white -font msyh.ttf -fill black -pointsize 24 -size x30 label:@t.txt -gravity southeast -geometry +10+5 -composite dest.jpg

方法3:
mogrify -font msyh.ttf -pointsize 24 -fill black -weight bolder -gravity southeast -annotate +20+20 @"t.txt" src.jpg

说明:上述第一、二种方法都有瑕疵,第二种背景不能变成透明,第一种虽然生成的图片可以透明,但是合成到原始图上效果不是很理想,第三种是完全透明的,所以推进用第三种方式来操作。

无觅相关文章插件,快速提升流量