使​用​I​m​a​g​e​m​a​g​i​c​k​ ​c​o​n​v​e​r​t​进​行​图​片​

发布时间:2014-04-23 13:29:33 阅读:1050次

转:http://wenku.baidu.com/link?url=MivedWt9bq1HEy59QT5ujmFfoNqHkCJKSbHpKtmrWOEXrYEXD8RBFcJvqTV45g9kDtu_qNjq5uAghqt8wq3b3mMtHShgayKOTW6YTYy5blm

identify得到一个图片的尺寸,

 
identify test.png
 
结果为:
 
test.png PNG 178x15 178x15+0+0 16-bit PseudoClass 65536c 2.28kb
 
使用shell
 
identify test.png | cut -d ' ' -f 3 | cut -d 'x' -f 1
 
identify test.png | cut -d ' ' -f 3 | cut -d 'x' -f 2
 
分别得到宽和高
 
不过要是在java中通过runtime来运行这个命令是很麻烦的,它使用空格把参数分割出来的,它不会认为引号引起来的是一个参数,这个也有解决办法,这里就不说了。
 
所以,还是用identify test.png这个命令,得到的字符串用java的方式处理一下,也很简单。
 
1、压缩一个图片,限定高度为60, 宽高比例不变,但如果宽大于90,截取中间一段
 
convert source.jpg -resize x60 result_60.jpg
 
获取result_60.jpg的宽和高
 
if( 宽 > 90 ){
 
    convert result_60.jpg -gravity center -extent 90x60 result_60.jpg
 
}
 
这里要注意, -gravity和-extent配合使用在6.2.8的版本中是不正常的,可以选择用crop
 
计算 dx = (宽-90)/2
convert result_60.jpg -crop 90x60+${dx}+0 result_60.jpg
 
2、压缩一个图片,限定高和宽, 宽高比例不变,需要适当的裁减
 
例如:压缩为60x60, 这是一个特例,宽高正好相同,如果不同,计算会有所不同,但方法一样。
 
获取source.jpg的宽和高
 
if( 宽 > 高 ){
 
  convert source.jpg -resize x60 -gravity center -extent 60x60 result_60.jpg
 
}
 
else{
 
  convert source.jpg -resize 60x -gravity center -extent 60x60 result_60.jpg
 
}
 
3、截图
 
convert result_60.jpg -crop wxh+dx+dy result_60.jpg
 
w为要截取图片的宽
 
h为要截取图片的高
 
dx,dy是开始截取的偏移位置,以左上角为原点
 
4、拼图
 
横向拼接
 
convert 1.jpg 2.jpg 3.jpg +append result.jpg
 
纵向拼接
convert 1.jpg 2.jpg 3.jpg -append result.jpg
 
横向+纵向
 
convert /( 1.jpg 2.jpg 3.jpg +append /) /
/( 4.jpg 5.jpg 6.jpg +append /) /
/( 7.jpg 8.jpg 9.jpg +append /) /
-append result.jpg
 
5、256色png压缩
convert -strip -depth 8 -colors 256 soure.png result.png
advpng -z -4 result.png
 
6、图片上写字
convert source.jpg -font xxx.ttf -fill red -pointsize 48 -annotate +50+50 @text.txt result.jpg
使用字体xxx.ttf, 字体用红色填充,字体48pixel, 位置(50,50), 文字在text.txt文件中
 
7、图片上画长方形
convert source.jpg fill none -stroke red -strokewidth 3 -draw rectangle 50,50 100,100 result.jpg
还一个线宽为3,颜色为红色,从50,50到100,100的正方形,不填充
画线为 -draw line 50,50 100,100

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询