訪客留言簿

星期二, 5月 10, 2011

[Ubuntu Linux] 利用 shell 文字終端機介面及 montage 指令來合併圖片(如 Amazon.jp 的商品圖)

前言

標題單純是為了便利搜尋引擎才打這麼長的。

然後我其實是用試錯的方式試出來的,各指令及參數的詳細意思我並不清楚。

2012.01.25 更新:如果你只是想抓完整大圖,建議改看抓 Amazon 大圖(各瀏覽器皆可)這篇,可以抓到品質比較好的圖。

基本需求

  1. linux
  2. bash shell(大概)
  3. ImageMagick(以下所用的 montage 指令為 IM 套件中的一種程式)
  4. 懂一點程式概念

準備

  1. 把 Amazon.jp 上分割過的大圖給抓下來放進單一資料夾
  2. 在該資料夾路徑下開終端機
  3. 照需求修改 shell 指令
  4. Enter 執行後一分鐘內就有成果

指令例(只有一行、想把兩個 montage 指令分開執行也行)

montage *.jpg -geometry +0+0 -tile 1x6 a.png && montage a*.png -geometry +0+0 -tile 4x1 b.png

指令說明

  1. montage - 拿來合併圖片的指令(後接檔名先出現的為輸入、後為輸出)
  2. tile - 指定不同圖片直行橫列該拼貼多少張的參數
  3. geometry - 指定某一塊拼貼圖的寬高像數大小及邊界該留多少像數的參數
  4. && - 代表做完前面的指令後繼續做後面的指令(與 pipe「|」無關)
  5. * - 表示任意數量的字元的常規表示式(如 *.jpg 表任一 jpg 圖檔)

執行過程說明

  1. 從 Amazon.jp 上抓下來的圖片副檔名大多是 jpg
  2. montage 一定會先由左到右排完再往下一橫列排序
  3. 承上、所以要先把一直行的圖各自拼完再把輸出好的圖合在同一橫列
  4. geometry 指定 +0+0 而不是 400x400 是要避免圖片大小不一
  5. 不過我也不確定是不是用 png 就真的無損了

示意圖及說明

假設從 Amazon.jp 抓下了這六張分割過的大圖:

(3,0,0)(3,1,0)(3,2,0)
(3,0,1)(3,1,1)(3,2,1)

因為 montage 會用 (3,0,0) (3,0,1) (3,1,0)... 的順序,由左上至右上,再換下一橫列,所以只跑一次一定會讓圖片亂掉。

因此先跑一次 -tile 1x2 把 (3,0,0) (3,0,1) 拼起來(後略),再把拼好的一張 (3,0,*) 一張 (3,1,*) 一張 (3,2,*),三張用 -tile 3x1 拼起來,就能得到原先完整未切割過的大圖了。

所以基本上改改 -tile 就可以。(圖請用 HttpFox 等的抓下來、想小試身手的可以拿這張試試:Amazon.co.jp: 僕は友達が少ない6 ドラマCD付き特装版: 平坂読, ブリキ: 本

延伸議題

  1. 讓程式自己去抓出最大數字後、直接判斷 -tile 要填多少
  2. 手動抓出分割圖的最後一張的網址後、丟給程式去自動抓完自動拼
  3. 輸入 Amazon.jp 商品網址後自動(略)

參考資料

  1. HINA :: 工程幼稚園 :: [ImageMagick note.] 關於 ImageMagick 的工作筆記
  2. ImageMagick: Command-line Tools: Montage
  3. 视频预览脚本与视频分割命令_Dill专区-http://weibo.com/dillisbest_百度空间
  4. 點陣圖(Bitmap)檔案格式 @ 瘋小貓的華麗冒險 :: 痞客邦 PIXNET ::

0 comments:

 

本站著作(不包含圖片、影音以及回應留言)係採用 Creative Commons 姓名標示-非商業性-相同方式分享 2.5 台灣 (中華民國) 授權條款授權