php下嘗試使用GraphicsMagick的縮略圖功能
更新時(shí)間:2011年01月01日 23:01:45 作者:
現(xiàn)在,對(duì)一個(gè)Web程序員來說,圖像處理已經(jīng)屬于必會(huì)知識(shí)之一了。且不說Flickr,Yupoo等專業(yè)圖片分享網(wǎng)站,就算是一個(gè)和圖片分享不沾邊的網(wǎng)站,也會(huì)用到很多圖片處理的功能,比如說:用戶上傳頭像,然后自動(dòng)生成縮略圖。
常用的圖片處理工具有GD,ImageMagick,GraphicsMagick等等。GD就是個(gè)阿斗,略過不提;ImageMagick是目前最流行的圖片處理工具,它的功能非常豐富;GraphicsMagick的功能略遜于ImageMagick,但是它的效率更強(qiáng)悍,就好比Apache和Nginx一樣,一個(gè)功能更強(qiáng),一個(gè)效率更勝。
現(xiàn)在更看重效率,所以本文就以GraphicsMagick為例來說說:
對(duì)于PHPer來說,有兩種使用GraphicsMagick的方式:
1:使用PECL Gmagick擴(kuò)展。
2:使用GraphicsMagick命令行。
PECL擴(kuò)展的方式我并不喜歡,一來PECL代碼Bug多多,二來PECL擴(kuò)展的實(shí)現(xiàn),代碼寫起來很羅嗦:比如縮放一個(gè)GIF動(dòng)畫圖片,如果你用命令行的方式,一句話就搞定,而用PECL擴(kuò)展的話,還得先算動(dòng)畫有幾幀,再循環(huán)處理,很麻煩。所以說我更傾向于使用命令行的方式,雖然命令行操作聽起來很“重”,但如果建立若干臺(tái)圖片服務(wù)器,通過Gearman連接起來,其實(shí)很是很有彈性的。
下面我們就以GraphicsMagick為例,采用命令行的方式來看看如何使用縮略圖功能:
先上一個(gè)原始圖片(input.jpg:160x120),以后的各個(gè)例子都會(huì)用到它:

BTW:列位看官現(xiàn)在可以咽口水了。
縮略圖1
gm convert input.jpg -thumbnail '100x100' output_1.jpg

實(shí)際生成的圖片大小是:100x75,也就是說說按此命令,會(huì)保持圖片比例不變生成縮略圖。這樣很不錯(cuò),但是有一個(gè)潛在的問題:我們不能簡(jiǎn)單明了的知道圖片的最終大小,結(jié)果是前端顯示的時(shí)候,無法設(shè)置img標(biāo)簽的width和height屬性,如果我沒記錯(cuò)的話,一般是推薦設(shè)定width和height屬性的,否則瀏覽器渲染起來可能會(huì)稍稍慢一點(diǎn)。
縮略圖2
gm convert input.jpg -thumbnail '100x100!' output_2.jpg

這次實(shí)際生成的圖片大小按定義來,但圖片變形了,有時(shí)候這是不能接受的。
縮略圖3
gm convert input.jpg -thumbnail '100x100^' \
-gravity center -extent 100x100 output_3.jpg

這次不僅保證了大小,還保證了比例。不過圖片經(jīng)過了裁剪。
縮略圖4
gm convert input.jpg -thumbnail '100x100' \
-background gray -gravity center -extent 100x100 output_4.jpg

這次不僅保證了大小,還保證了比例,同時(shí)沒有對(duì)圖片進(jìn)行任何裁剪,多余的部分按指定顏色進(jìn)行填充。
縮略圖5
gm convert input.jpg -thumbnail '10000@' \
-background gray -gravity center -extent 100x100 output_5.jpg

這次保證了大小和比例,其中的10000就是100x100的乘積,同時(shí)在填充和裁剪之間做了一個(gè)平衡。
明白了以上幾個(gè)例子,縮略圖基本就能通吃了,肯定有一種會(huì)適合你的需求。GraphicsMagick的資料非常少,但好消息是GraphicsMagick和ImageMagick的用法基本兼容,所以你可以通過ImageMagick的資料來套用。
補(bǔ)充:如果想讓用戶手動(dòng)裁剪頭片的話,imgAreaSelect是個(gè)好選擇。
現(xiàn)在更看重效率,所以本文就以GraphicsMagick為例來說說:
對(duì)于PHPer來說,有兩種使用GraphicsMagick的方式:
1:使用PECL Gmagick擴(kuò)展。
2:使用GraphicsMagick命令行。
PECL擴(kuò)展的方式我并不喜歡,一來PECL代碼Bug多多,二來PECL擴(kuò)展的實(shí)現(xiàn),代碼寫起來很羅嗦:比如縮放一個(gè)GIF動(dòng)畫圖片,如果你用命令行的方式,一句話就搞定,而用PECL擴(kuò)展的話,還得先算動(dòng)畫有幾幀,再循環(huán)處理,很麻煩。所以說我更傾向于使用命令行的方式,雖然命令行操作聽起來很“重”,但如果建立若干臺(tái)圖片服務(wù)器,通過Gearman連接起來,其實(shí)很是很有彈性的。
下面我們就以GraphicsMagick為例,采用命令行的方式來看看如何使用縮略圖功能:
先上一個(gè)原始圖片(input.jpg:160x120),以后的各個(gè)例子都會(huì)用到它:

BTW:列位看官現(xiàn)在可以咽口水了。
縮略圖1
gm convert input.jpg -thumbnail '100x100' output_1.jpg

實(shí)際生成的圖片大小是:100x75,也就是說說按此命令,會(huì)保持圖片比例不變生成縮略圖。這樣很不錯(cuò),但是有一個(gè)潛在的問題:我們不能簡(jiǎn)單明了的知道圖片的最終大小,結(jié)果是前端顯示的時(shí)候,無法設(shè)置img標(biāo)簽的width和height屬性,如果我沒記錯(cuò)的話,一般是推薦設(shè)定width和height屬性的,否則瀏覽器渲染起來可能會(huì)稍稍慢一點(diǎn)。
縮略圖2
gm convert input.jpg -thumbnail '100x100!' output_2.jpg

這次實(shí)際生成的圖片大小按定義來,但圖片變形了,有時(shí)候這是不能接受的。
縮略圖3
gm convert input.jpg -thumbnail '100x100^' \
-gravity center -extent 100x100 output_3.jpg

這次不僅保證了大小,還保證了比例。不過圖片經(jīng)過了裁剪。
縮略圖4
gm convert input.jpg -thumbnail '100x100' \
-background gray -gravity center -extent 100x100 output_4.jpg

這次不僅保證了大小,還保證了比例,同時(shí)沒有對(duì)圖片進(jìn)行任何裁剪,多余的部分按指定顏色進(jìn)行填充。
縮略圖5
gm convert input.jpg -thumbnail '10000@' \
-background gray -gravity center -extent 100x100 output_5.jpg

這次保證了大小和比例,其中的10000就是100x100的乘積,同時(shí)在填充和裁剪之間做了一個(gè)平衡。
明白了以上幾個(gè)例子,縮略圖基本就能通吃了,肯定有一種會(huì)適合你的需求。GraphicsMagick的資料非常少,但好消息是GraphicsMagick和ImageMagick的用法基本兼容,所以你可以通過ImageMagick的資料來套用。
補(bǔ)充:如果想讓用戶手動(dòng)裁剪頭片的話,imgAreaSelect是個(gè)好選擇。
您可能感興趣的文章:
- 詳解SpringBoot配置連接池
- springboot如何讀取配置文件(application.yml)中的屬性值
- SpringBoot定時(shí)任務(wù)兩種(Spring Schedule 與 Quartz 整合 )實(shí)現(xiàn)方法
- SpringBoot入坑筆記之spring-boot-starter-web 配置文件的使用
- 詳解springboot-修改內(nèi)置tomcat版本
- 詳解SpringBoot文件上傳下載和多文件上傳(圖文)
- SpringBoot+Maven 多模塊項(xiàng)目的構(gòu)建、運(yùn)行、打包實(shí)戰(zhàn)
- Springboot集成GraphicsMagick
相關(guān)文章
PHP使用memcache緩存技術(shù)提高響應(yīng)速度的方法
這篇文章主要介紹了PHP使用memcache緩存技術(shù)提高響應(yīng)速度的方法,以實(shí)例形式分析了memcache緩存技術(shù)的使用技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12php使用Jpgraph創(chuàng)建柱狀圖展示年度收支表效果示例
這篇文章主要介紹了php使用Jpgraph創(chuàng)建柱狀圖展示年度收支表效果,結(jié)合完整實(shí)例形式分析了Jpgraph創(chuàng)建柱狀圖的具體步驟與操作技巧,需要的朋友可以參考下2017-02-02新安裝的MySQL數(shù)據(jù)庫(kù)需要注意的安全知識(shí)
在你自己安裝了一個(gè)新的MySQL服務(wù)器后,你需要為MySQL的root用戶指定一個(gè)目錄(缺省無口令),否則如果你忘記這點(diǎn),你將你的MySQL處于極不安全的狀態(tài)(至少在一段時(shí)間內(nèi))。2008-07-07php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence錯(cuò)誤的處理方法
在利用php解析xml時(shí)提示Invalid byte 1 of 1-byte UTF-8 sequence錯(cuò)誤了,這個(gè)問題我百度查實(shí)說是編碼問題,結(jié)果我把編碼處理一下果然KO了,下面我來分享一下解決辦法2013-11-11php腳本守護(hù)進(jìn)程原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了php腳本守護(hù)進(jìn)程原理與實(shí)現(xiàn)方法,較為詳細(xì)的分析了php腳本守護(hù)進(jìn)程的實(shí)現(xiàn)思路、原理、格式及具體實(shí)現(xiàn)方法,需要的朋友可以參考下2017-07-07使用ucenter實(shí)現(xiàn)多站點(diǎn)同步登錄的講解
今天小編就為大家分享一篇關(guān)于使用ucenter實(shí)現(xiàn)多站點(diǎn)同步登錄的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03