利用ImageMagick切割图片

本文介绍了如何在CentOS上安装ImageMagick并利用其进行图片切割。当面对一幅24000*11000的巨大地图时,直接使用convert命令会导致资源耗尽。作者尝试用PHP实现,但遇到超时问题,最终选择了PERL编写批处理脚本,通过循环完成切割任务。虽然考虑过使用PERL的多线程提高效率,但因初学而未实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.安装ImageMagick

1.去http://www.imagemagick.org/找rpm包下载,当然你也可以找代码来编译.我比较懒找了个ImageMagick-6.2.6-1.i386.rpm.

2.安装的时候会提示需要libwmf-0.2.8.3-5.i386.rpm,如果你只用来切割图片大可以不管它.因为装libwmf还需要其他几个包,挺麻烦的.在CentOS4.2还容易一点,在3.6就更麻烦了.更新好几个包.最后发现不安装也正常切割.需要执行强制安装命令:

rpm -i --force --nodeps ImageMagick-6.2.6-1.i386.rpm

二.用ImageMagick切割图片

切割图片需要用到convert -crop命令,详细切割图片的方法可以看这个网站http://www.cit.gu.edu.au/~anthony/graphics/imagick6/crop/

我试过有两种方法.

1.直接用命令把图片生成切割图

convert -crop 300x300 +repage sz.jpg sz_level1/sz_%d.jpg

一般的图片还可以,我要切割的是一幅24000*11000的巨大地图,1G内存还是照样耗尽,还把服务器搞死了.最后之后用原始的方法.

2.把图片一幅一幅地切割下来.这里需要做两个循环,我写过一个PHP做,设置了set_time_limit(0);还是会超时,计算过切一幅图下来大概用1分钟,我的地图需要切割3000多张...最后放弃了用PHP实现.直接在LINUX下运行批处理,可以用SHELL写,也可以用PERL写.用起来PERL更强大一些,类似C语言,写起来也方便,反正两种都不熟悉,就觉得用PERL写.找了一些资料.完成了我第一个PERL程序,

#!/opt/lampp/bin/perl
#这里需要注目perl的目录,我这里用xampp的prel,一般情况下
my $mapW=23417;#地图宽
my $mapH=11425;#地图高
my $maxW=300;#栅格宽
my $maxH=300;#栅格高
$scrpic="sz.jpg";#需要切割的地图
my $widthnum=int($mapW/$maxW);#水平栅格数
my $heightnum=int($mapH/$maxH);#垂直栅格数
for (my $i=0;$i < =$heightnum;$i++) {
for (my $j=0;$j < =$widthnum;$j++) {
my $mapX=$j*$maxW;#水平位置
my $mapY=$i*$maxH;#垂直位置
$exec_str="convert -crop 300x300+$mapX+$mapY $scrpic date/level1/$i"."_"."$j.jpg";
print "$exec_str/n";
system($exec_str);
 }
}

 保存为convert.pl,如果输入命令perl convert.pl ,然后就等吧..如果perl多线程效率应该会高一点,但是初学.暂时这样吧.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值