文章標簽 ‘圖片處理’

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的圖片

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。

利用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.twubdg.tw作為水印加上圖片上,命令如下
convert src.jpg -gravity southeast -fill black -pointsize 16 -draw "text 5,5 'http://www.twubdg.tw'" dest-c.jpg

mogrify -pointsize 16 -fill black -weight bolder -gravity southeast -annotate +5+5 "http://www.twubdg.tw" 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

說明:上述第一、二種方法都有瑕疵,第二種背景不能變成透明,第一種雖然生成的圖片可以透明,但是合成到原始圖上效果不是很理想,第三種是完全透明的,所以推進用第三種方式來操作。

ImageMagicK之合成圖片

2011年8月26日 沒有評論

ImageMagicK能方便的把多張小圖片合成一張大圖片。合成的方式大致有三種,

  1. 使用convert命令加 +append或-append參數
  2. 使用convert命令加 -composite參數
  3. 直接使用composite命令來完成

其中方式1處理圖片只能左右或上下來拼接圖片,方式2最為靈活,可以一次性把多張圖片合成在一起,方式3處理多張圖片時需要一張一張來處理。下面的例子是把google地圖中的4個256×256塊合成一張512×512的大圖,原始圖片如下:

使用方式1
convert +append u0.png u1.png u.png
convert +append d0.png d1.png d.png
convert -append u.png d.png dest.png

說明:其中 +append 橫向把多張圖片拼接在一起,可以多于2張,圖片按上邊緣對齊,最后一個參數是目標圖片,而-append是縱向拼接圖片,圖片按左邊緣對齊。

使用方式2
convert -size 512x512 -strip -colors 8 -depth 8 xc:none u0.png -geometry +0+0 -composite u1.png -geometry +256+0 -composite d0.png -geometry +0+256 -composite d1.png -geometry +256+256 -composite dest4.png

說明:convert -size 512×512 xc:none 創建一張空白圖片,然后把小圖片合成到其上面。合成的命令大致為:convert 背景圖片 圖片 定義坐標原點 圖片的位置 -composite 目標圖片,其中“圖片 定義坐標原點 圖片的位置 -composite” 可以重復,從而把多張圖片一次性合成到背景圖片上。使用 -gravity 定義坐標原點,默認是左上角,可以用east,north,northwest等來重新定義原點,-geometry相對于原點的位置

使用方式3
convert -size 512x512 -strip -colors 8 -depth 8 xc:none dest1.png
composite -geometry +0+0 u0.png dest1.png dest1.png
composite -geometry +256+0 u1.png dest1.png dest1.png
composite -geometry +0+256 d0.png dest1.png dest1.png
composite -geometry +256+256 d1.png dest1.png dest1.png

說明: composite 定義坐標原點 圖片的位置 圖片 背景圖片 目標圖片

使用ImageMagicK給圖片添加邊框

2011年8月19日 沒有評論

ImageMagicK處理圖片的功能 十分強大,本文通過例子的方式來介紹一下如果給圖片添加邊框。

添加邊框有兩種方式,一是使用?-bordercolor(邊框顏色)和-border(邊框的寬度),另外一個是用-mattecolor(邊框顏色)加-frame(邊框的幾何形狀),下面分別用例子來說明上述兩種創建方式。

原始圖片(文件名為exam.jpg)如下:

執行命令:convert exam.jpg -bordercolor blue -border 5 border-1.jpg 后生成新圖片如下:

邊框的顏色可以使用 #00ffcc 的方式,但是需要用雙引號包起來,另外可以在一個命令行中給圖片加幾層邊框。
執行命令:convert exam.jpg ?-bordercolor blue -border 5 -bordercolor “#00ff00″ -border 5 ?border-2.jpg,結果如下圖:

通過上述的方法,似乎生成的邊框都是一樣框的,可以用第二種方式來生成不一樣的邊框. 閱讀全文…

無覓相關文章插件,快速提升流量

30选5怎么中奖