縮略圖-快速開始(GraphicsMagick )

一、爲什麼使用縮略圖

  • 加快頁面顯示速度,
    比如一個頁面上要顯示10個圖片,如果都用3000像素級別的原圖的話(在CSS裏設置圖片顯示爲00*100,其實還是會加載原圖然後縮略的),一個頁面的大小和顯示速度可想而知。

  • 爲了佈局
    比如爲了佈局需要,頁面上需要顯示的都是150100(比例3:2)的圖,而你的原圖是600800(比例3:4),直接通過CSS壓縮圖片的話圖片肯定變形嚴重,所以生成縮略圖截取符合比例的縮略部分就美觀多了.

總結:其最核心的需求,就是提升加載性能。

二、縮略圖原理

一般的話採取縮點,就是按比例從原始圖像中的位置上等距抽取一些像素生成新圖。但不同的庫具體算法有所不同。

三、JAVA縮略圖

使用JDK自帶的方法處理圖片非常的不方便,目前處理圖片主流的有兩種,第一種依賴環境需要安裝imageMagick和GraphicsMagick,第二種是使用Google開源的Thumbnailator這個使用起來簡單點,不過相對來說Thumbnailator在處理圖片的時候還原度沒有第一種的好,不過能滿足絕大多數的情況。

1. 開源類庫 Thumbnailator

Thumbnailator 是一個優秀的圖片處理開源Java類庫。處理效果遠比Java API的好。從API提供現有的圖像文件和圖像對象的類中簡化了處理過程,兩三行代碼就能夠從現有圖片生成處理後的圖片,且允許微調圖片的生成方式,同時保持了需要寫入的最低限度的代碼量。還支持對一個目錄的所有圖片進行批量處理操作。

支持的處理操作:圖片縮放,區域裁剪,水印,旋轉,保持比例。

2. GraphicsMagick+im4java圖片處理

[推薦]GraphicsMagick+im4java圖片處理
參考URL: https://www.cnblogs.com/xieegai/p/8438918.html
利用 imagemagic 對圖片進行處理,java工程中,使用im4java來操作imagemagic的api
參考URL: https://cloud.tencent.com/developer/article/1038086

im4java只是封裝ImageMagick的命令。所以不需要依賴dll,也不存在64位系統調用32位dll的問題.而且im4java支持GraphicsMagick,GraphicsMagick是ImageMagick的分支。相對ImageMagick ,GraphicsMagick更穩定,消耗資源更少。最重要的是不依賴dll環境
所以使用 im4java 是更好的選擇。

下載 im4java

downlaod 地址:http://sourceforge.net/projects/im4java/?source=directory

im4java的思路是通過線程或者進程執行graphicsmagick的命令,它的api只是爲了能生成命令,而不是調用graphicsmagick的庫。

IM4JAVA是同時支持ImageMagick和GraphicsMagick的,這裏是bool值,如果爲true則使用GM,如果爲false支持IM。

四、C實現縮略圖

1. GraphicsMagick

官網:http://www.graphicsmagick.org/

GraphicsMagick最初源於ImageMagick5.5.2(2002年11月),但從那時起就完全獨立於ImageMagick項目。自從ImageMagick的fork以來,許多作者使用開放的開發模型進行了許多改進(參見新聞),但沒有破壞API或實用程序操作。

GraphicsMagick提供了一系列實用程序、編程接口和gui,以支持文件格式轉換、圖像處理和2D矢量渲染。

GraphicsMagick最初基於ImageMagick Studio的ImageMagick(最初由杜邦的John Cristy編寫)。GraphicsMagick的目標是提供儘可能高質量的產品,同時鼓勵所有感興趣的開發人員開放和積極參與。GraphicsMagick使用許可證旨在允許它用於任何應用程序,包括專有或GPLed應用程序。有關GraphicsMagick許可證,請參閱文件Copyright.txt。

總結: GraphicsMagick 號稱圖像處理領域的瑞士軍刀。 可以看作改良版的ImageMagick。GraphicsMagick 功能強大。

2. windows 下安裝GraphicsMagick

官網下載http://www.graphicsmagick.org/

在這裏插入圖片描述雙擊GraphicsMagick-1.3.33-Q16-win64-dll.exe

快捷鍵win+r -》輸入打開運行cmd,並輸入‘gm’即表示安裝成功

3. linux 下編譯安裝 GraphicsMagick

CentOS安裝GraphicsMagick
參考URL: https://www.centos.bz/2019/02/centos%E5%AE%89%E8%A3%85graphicsmagick/
參考官網安裝Installing GraphicsMagick
參考URL: http://www.graphicsmagick.org/README.html

  1. 源碼下載:搜索GraphicsMagick官方網站,進入下載頁。
    http://www.graphicsmagick.org/download.html
wget https://nchc.dl.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.33/GraphicsMagick-1.3.33.tar.gz
  1. 安裝依賴
    安裝編譯環境
yum install -y gcc gcc-c++ make cmake autoconf automake

依賴:libpng和libjpeg等圖片開發包的安裝, 這些yum之前有裝,建議先yum remove,再yum install

yum install -y libjpeg-devel libjpeg
yum install -y libpng-devel libpng
yum install -y giflib-devel giflib
  1. 編譯安裝GM
#安裝GraphicsMagick
tar -zxvf GraphicsMagick-1.3.33.tar.gz
cd GraphicsMagick-1.3.33
./configure --prefix=/usr/local/GraphicsMagick

在執行完上述命令後會有一段輸出,可以查看GraphicsMagick支持的圖片格式,在Configured value下爲yes的表示爲支持,PNG、JPEG v1和ZLIB必須爲yes

注意: 前面安裝了yum正確安裝png、jpeg依賴,這裏顯示就會爲yes,否則爲no。

編譯安裝make && make install
  1. 設置環境變量
    vim /etc/profile.d/gmagick.sh
export GMAGICK_HOME="/usr/local/GraphicsMagick"
export PATH="$GMAGICK_HOME/bin:$PATH"
LD_LIBRARY_PATH=$GMAGICK_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

生效配置

source /etc/profile.d/gmagick.sh
  1. 驗證是否成功安裝
gm version

使用命令查看GraphicsMagick所支持的圖片格式:

# gm convert -list formats 
如果列表中如果顯示PNG、JPEG、GIF等則表示已支持圖片轉換

4. graphicsmagick常用命令

GraphicsMagick 1.3.23 常用命令
參考URL: https://blog.csdn.net/revitalizing/article/details/52281828
graphicsmagick常用命令
參考URL: https://www.cnblogs.com/yesyes/p/6921130.html
官網命令參考: http://www.graphicsmagick.org/utilities.html

1)顯示圖像文件詳細信息

[root@localhost ~]# gm identify a.jpg
a.jpg JPEG 601x601+0+0 DirectClass 8-bit 11.8Ki 0.000u 0m:0.000002s

識別圖片(高級)

 gm identify -verbose a.jpg 

結果:打印出很多信息。

2) 格式轉換

gm convert a.jpg a.pdf(轉換爲pdf)

3) 調整圖像dpi和大小

gm convert -density 288 -geometry 25% a.gif b.gif
(縮小爲原先的1/4,並且dpi爲288)

gm convert -resize 640x480 a.gif a_640_480.gif
(轉換爲640x480的圖像)

4) 在圖像上添加文字

gm convert -font Arial -fill blue -pointsize 18 -draw “text 10,10 ‘your text here’” a.jpg a_文字.png

5) 從gif文件中抽取第一幀

gm convert “Image.gif[0]” first.gif

6)建立gif圖像

gm convert -delay 20 frame.gif animation.gif
gm convert -loop 50 frame.gif animation.gif
(讓動畫循環50次)
m convert -delay 20 frame1.gif -delay 10 frame2.gif -delay 5 frame3.gif animation.gif
(對每一幀手動指定延時)

五、ImageMagick還是GraphicsMagick?

ImageMagick還是GraphicsMagick?
參考URL: https://www.cnblogs.com/findumars/p/5597299.html
GD、ImageMagick、GraphicsMagick
參考URL: https://www.cnblogs.com/flyyu21/p/6379052.html

ImageMagick是目前最流行的圖片處理工具,它的功能非常豐富;GraphicsMagick的功能略遜於 ImageMagick,但是它的效率更強悍,就好比Apache和Nginx一樣,一個功能更強,一個效率更勝。據說Flickr原來就用ImageMagick,後來改成了GraphicsMagick。似乎就是因爲效率更好些。淘寶用於圖片resize和水印的工具不是imagemagick而是graphicsmagick。

官方描述:
與ImageMagick或其他流行軟件相比,更喜歡GraphicsMagick的原因如下:

  1. GM比ImageMagick效率更高,因此它可以使用更少的資源更快地完成任務。
  2. GM比ImageMagick更小、更輕(安裝小3-5倍)。
  3. GM被用於處理世界上最大的照片網站(如Flickr和Etsy)上的數十億份文件。
  4. GM與其他已安裝的軟件不衝突。
  5. GM比ImageMagick遭受更少的安全問題和攻擊。
  6. GM參與了谷歌的oss模糊項目(自2018年2月起)。
  7. GM valgrind的100% clean (memcheck和helgrind)。
  8. GM使用ASan通過了嚴格的內存錯誤測試。
  9. GM使用(UBSan)通過了未定義行爲測試。
  10. GM有一個全面的手冊頁。
  11. GM提供了API和ABI穩定性以及可以依賴的託管版本(ImageMagick沒有)。
  12. GM提供了詳細但可理解的變更日誌和新聞文件(ImageMagick沒有)。
  13. GM是免費的,可以用來支持開放和專有的應用程序。
  14. GM是根據X11風格的許可證(MIT許可證)發佈的,該許可證由開源計劃批准,推薦osccc使用,並與GNU GPL兼容。
  15. GM源代碼是在Mercurial中管理的,Mercurial是一個分佈式的源代碼管理工具,支持本地更改的管理。存儲庫的歷史可以追溯到1998年。
  16. 2015年5月25日,根據Coverity分析,GM每1000行代碼(包括293341行代碼)有0.00(零)個缺陷。
  17. GM的開發人員貢獻了其他免費公開項目。

GraphicsMagick的版權歸GraphicsMagick組和許多其他組所有。

以下是GraphicsMagick可以做的幾個例子:

  • 將圖像從一種格式轉換爲另一種格式(如TIFF到JPEG)
  • 調整大小、旋轉、銳化、減少顏色或向圖像添加特殊效果。
  • 創建縮略圖圖像的蒙太奇
  • 創建適合在Web上使用的透明圖像
  • 比較兩個圖像
  • 將一組圖像轉換爲GIF動畫序列
  • 通過組合多個單獨的圖像創建合成
  • 在圖像上繪製形狀或文本
  • 用邊框裝飾圖像
  • 描述圖像的格式和特徵

結論: GraphicsMagick 相對比較強大,使用GraphicsMagick 。

六、參考

ImageMagick還是GraphicsMagick?
參考URL: https://www.cnblogs.com/findumars/p/5597299.html

發佈了87 篇原創文章 · 獲贊 36 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章