似乎感覺這個事件沒什麼好寫的,但我還是記一下。
centos下沒有個很爽的截圖軟體,網上學友們都推薦scrot這個。
提示:在gnome下,可以用 gnome-screenshot 指令行進截屏,詳細使用方法請 man。安裝scrot實在太折騰了!
下載下傳下來安裝,可能會遇到一個庫:giblib,而giblib又依賴imlib2。在這個freecode.com網上都可以下載下傳。怎麼我安裝,我不再多說了,莫非都是:
你懂的,在./configure過程中缺什麼就去找什麼。
在 make 的時候,出現以下錯誤:
in file included from main.c:26:
scrot.h:29:22: error: x11/xlib.h: no such file or directory
在網上查得原因,需要安裝:libx11-devel
這個錯誤就過了。
不過又出現了這個錯誤:
in file included from /usr/local/include/giblib/giblib.h:30,
from scrot.h:51,
from main.c:26:
/usr/local/include/giblib/gib_imlib.h:32:20: error: imlib2.h: no such file or directory
這是 imlib 庫沒有安裝的原因。
下載下傳庫 imlib2-1.4.4 進行安裝,make 時報錯:
api.c:5:34: error: x11/extensions/shape.h: no such file or directory
in file included from api.c:23:
ximage.h:5:33: error: x11/extensions/xshm.h: no such file or directory
還有錯誤:api.c:30:22: error: ft2build.h: no such file or directory
報錯:/usr/include/ft2build.h:56:38: error: freetype/config/ftheader.h: no such file or directory
再 make,報錯:api.c:5416: fatal error: opening dependency file .deps/api.tpo: permission denied
缺權限。那就 sudo make
發現 /usr/lib/ 下有兩個類似的庫,但就是沒有 libpng12.so,将 libpng12.so.0 檔案連結到 /usr/lib/libpng12.so 上。
再 make,報錯:loader_png.c:2:17: error: png.h: no such file or directory
再 make,報錯:
loader_png.c: in function ‘load’:
loader_png.c:61: error: dereferencing pointer to incomplete type
loader_png.c: in function ‘save’:
loader_png.c:268: error: dereferencing pointer to incomplete type
打開 loader_png.c 檔案,發現确定引用到了 png_structp 的類型。
png_ptr 就是 png_structp 類型的。在這個檔案裡沒有定義 png_structp 的類型,頭檔案也隻包含了 png.h
用 locate png.h 找到 /usr/local/include/png.h,打開檔案發現:
檔案中沒有定義 png_struct_def 結構體。找源檔案中去找找看。
在源碼的 ./pngstruct.h 檔案裡有定義。但 png.h 檔案沒有 #include "pngstruct.h",是以報錯。
筆者估計png庫的設計都并沒有打算将 png_struct_def 的結構體的内部成員暴露出來,是以在 png.h 檔案裡沒有定義,隻是指定了指針與通路函數。沒想到在 png_loader.c 裡破了這個規距。
既然如此,那麼就好辦了。将 pngstruct.h 檔案copy到 /usr/local/include/ 目錄下去。再在 png_loader.c 檔案裡 #include <pngstruct.h> 就行了。
loader_png.c:62: error: ‘png_struct’ has no member named ‘jmpbuf’
loader_png.c:269: error: ‘png_struct’ has no member named ‘jmpbuf’
說明剛剛的修改生效了,隻是 png_struct_def 中确實沒有 jmpbuf 這個字段。這很可能是版本不一緻導緻的。
在本人 libpng 的版本中,沒有 jmpbuf 這個字段,但是提供了一個從 png_struct_def 中擷取 jmpbuf 的函數接口
用 png_jmpbuf(png_ptr) 來替代對 png_ptr->jmpbuff 的直接通路。
再 make,這次通過了!
好!imlib2-1.4.4 是編譯通過了。再回來 make scrot。
很順利,也通過了!
全部安裝完成功了之後,運作scrot時出現一個錯誤:
scrot: error while loading shared libraries: libgiblib.so.1: cannot open shared object file: no such file or directory
說是libgiblib.so.1打不開。解決的方法是:
(1)找到這個libgiblib.so.1檔案。
好了,現在可以使用了。
[一般用法] 使用 scrot 可以抓取整個桌面、某個指定的視窗、以及選擇的矩形區域。
抓取桌面:scrot desktop.png,該指令将目前的整個桌面抓取下來,并儲存為 desktop.png 檔案。可以在目前的目錄中找到此圖像檔案。
抓取視窗:scrot -bs window.png,選項 b 使 scrot 在抓取視窗時一同将外邊框抓取下來,而 s 選項則讓使用者選擇所要抓取的是何視窗。
抓取區域:scrot -s rectangle.png,在執行此指令後,使用滑鼠拖曳的矩形區域将被 scrot 抓取下來,并儲存為 rectangle.png 檔案。
[進階用法] 對于普通的抓取,使用 scrot 的基礎便足以應付了。但在某些特殊情況之下,使用 scrot 抓取圖像需要講究一些技巧。
延時抓取:scrot -cd 10 menu.png,此指令中的 d 選項用于延時抓取圖像,其後的 10 代表延時 10 秒;前面的選項 c 顯示倒計時。在抓取菜單或是指令提示時,該技巧将充分展示其魔力。
生成縮圖:scrot -t 50% thumb.png,這個指令在抓取圖像的同時生成該圖像的縮略圖。選項 t 将打開此功能,其後的 50% 為原圖的縮放百分比。
更改品質:scrot -q 70 quality.jpg,此指令中的 q 選項用于更改所抓圖像的品質,其數值介于 1-100 之間,預設為 75。數值越大,意味着圖像品質越高;同時,圖像的壓縮率也就越低,占用空間越大。
操作抓圖:scrot action.png -e ‘mv $f ~/images/’,該指令将抓取的圖像移動到 ~/images/ 目錄。顯然,操作圖像的功能由 e 選項開啟,其中的 $f 代表原圖的路徑/檔案名。
以上示例皆指定了需要儲存的抓圖的檔案名稱。實際上,如果不指定名稱,那麼 scrot 在抓取圖像後會自動使用目前的日期時間、寬度高度的組合來生成檔案名稱。如:2012-07-21-154232_238x148_scrot.png
然而這樣還是不太友善。可以建立一個檔案,如screenshot
touch screenshot
vim screenshot(如果沒有安裝vim,可以執行sudo apt-get install vim進行安裝)
輸入 scrot -s -e ‘mv $f ~/screenshots’(注:mv $f ~/screenshots指令兩邊為單引号)
儲存退出vim,然後 chmod u+x screenshot
這樣就可以通過運作screenshot檔案來執行scrot了。或者可以通過建立軟連結來使用scrot。比如:在/usr/bin目錄下執行sudo ln -s ~/screenshot scs。以後直接在終端裡輸入scs即可用滑鼠截圖。