學習PHP中好玩的Gmagick影像操作擴充套件的使用
在 PHP 的影像處理領域,要說最出名的 GD 庫為什麼好,那就是因為它不需要額外安裝的別的什麼影像處理工具,而且是隨 PHP 原始碼一起釋出的,只需要在安裝 PHP 的時候新增上編譯引數就可以了。
GD 庫雖然已經可以幫助我們處理很多事情了,比如圖片的簡單繪製、加水印、縮放等,但業務需求往往更加的多樣和豐富,比如我們今天需要像 PS 一樣能夠讓圖片翻轉、模糊之類的功能,僅靠 GD 庫就非常麻煩了。
當然,可能有不少的同學應該用過 ImageMagick ,不過我們今天先來介紹的可不是 ImageMagick ,而是它的一個分支軟體 GraphicsMagick 。GraphicsMagick 是從 ImageMagick 5.5.2 中 fork 出來的一個分支。它相對於 ImageMagick 來說並沒有什麼新的特性,只是更加的專注於穩定性和效能方面。
所以呢,我們學習的重點將放在後面的 ImageMagick 中,對於 GraphicsMagick 就透過這篇文章簡單地瞭解一下吧!
安裝
首先,我們需要在系統中安裝 GraphicsMagick ,然後再安裝 PHP 中的 Gmagick 擴充套件。
載入圖片及檢視圖片資訊
第一步還是來簡單地看一下如何載入初始化 Gmagick 物件以及它的一些基本資訊。
$image = new Gmagick('./img/2.jpg');
echo 'Copyright:', $image->getcopyright(), PHP_EOL;
// Copyright:Copyright (C) 2002-2020 GraphicsMagick Group.
// Additional copyrights and licenses apply to this software.
// See for details.
echo 'Filename:', $image->getimagefilename(), PHP_EOL; // Filename:./img/2.jpg
echo 'Image Format:', $image->getimageformat(), PHP_EOL; // Image Format:JPEG
echo 'Image Width and Height:', $image->getimagewidth(), ' * ', $image->getimageheight(), PHP_EOL; // Image Width and Height:300 * 244
echo 'Image type:', $image->getimagetype(), PHP_EOL; // Image type:6
直接使用 new Gmagick(path) 就可以例項化一個 Gmagick 物件。接著,我們就可以透過一系列的 getxxxx 相關的方法來獲得圖片的一些資訊,比如說當前 GraphicsMagick 的版本資訊,圖片路徑、大小、格式等等。
同樣地,要對圖片進行其它操作也是直接在這個物件下面使用各種擴充套件庫中提供的方法就可以了。
圖片加邊框
// 加邊框
$image = new Gmagick('./img/2.jpg');
$image->borderimage("green", 2, 2)->oilpaintimage(0.3);
$image->write('./img/2-border.jpg');
透過 borderimage() 方法就可以非常簡單地給圖片加上一個寬高為 2 畫素的綠色邊框。oilpaintimage() 是為圖片新增一個油畫效果,看出來了嗎,Gmagick 例項化後的物件中的方法是可以鏈式呼叫的。只要當前你使用的方法返回的也是 Gmagick 物件就可以了。
裁剪圖片及縮圖
$image = new Gmagick('./img/2.jpg');
$image->resizeimage(150, 150, 10, 1);
$image->write('./img/2-resize.jpg');
$image = new Gmagick('./img/2.jpg');
$image->scaleimage(150, 150);
$image->write('./img/2-scale.jpg');
這兩個方法,resizeimage() 和 scaleimage() 都可以用來改變圖片的大小,resizeimage() 會以通道的方式進行操作,不過實際的使用情況其實並沒有太明顯的差別。
// 縮圖
$image = new Gmagick('./img/2.jpg');
$image->thumbnailimage(100, 0);
$image->write('./img/2-thumbnail.jpg');
// 裁剪縮圖
$image = new Gmagick('./img/2.jpg');
$image->cropthumbnailimage(100,90);
$image->write('./img/2-cropthumbnaili.jpg');
// 按比例縮小一半
$image = new Gmagick('./img/2.jpg');
$image->minifyimage();
$image->write('./img/2-minify.jpg');
thumbnailimage() 是直接生成縮圖,它的目標是製作適合在網上顯示的小的低成本縮圖圖象,我們可以只填一個寬或者只填一個高,影像就會自動等比例地綻放到指定的大小。cropthumbnailimage() 則是先透過縮小影像,然後從中心裁剪指定區域來建立固定大小的縮圖。其實它們從簡單的測試表現來看,區別也並不是很大。
minifyimage() 則是直接等比例地將圖片縮小一半,所以這個方法不需要任何引數。
圖片旋轉、偏移
// 垂直翻轉
$image = new Gmagick('./img/2.jpg');
$image->flipimage();
$image->write('./img/2-flip.jpg');
// 水平翻轉
$image = new Gmagick('./img/2.jpg');
$image->flopimage();
$image->write('./img/2-flop.jpg');
// 旋轉影像
$image = new Gmagick('./img/2.jpg');
$image->rotateimage('#ffffff', 60);
$image->write('./img/2-rotate.jpg');
// 偏移影像
$image = new Gmagick('./img/2.jpg');
$image->rollimage(150, 150);
$image->write('./img/2-roll.jpg');
flipimage() 和 flopimage() 是直接將圖片進行垂直和水平地翻轉,rotateimage() 則是根據指定的角度來旋轉圖片,第一個引數是旋轉之後我們要給旋轉經過的地方留下的背景色。rollimage() 的效果是偏移圖片,就是將圖片的位置在原始尺寸中進行偏移,這個效果說出來可能有點不太好理解,大家可以自己試一下,比較炫酷哦。
圖片顏色效果調整
// 調亮度、飽和度、色調
$image = new Gmagick('./img/2.jpg');
$image->modulateimage(80, 80, 80);
$image->write('./img/2-modulate.jpg');
// 顏色對比度
$image = new Gmagick('./img/2.jpg');
$image->normalizeimage(30);
$image->write('./img/2-normalize.jpg');
modulateimage() 直接透過三個引數來對應地調整圖片的亮度、飽和度和色調,它們的取值是 -100 到 100 之間的整數。這個其實就和 PS 中相關的圖片調整工具類似,在 PS 或者各種修圖軟體中都會是一個上下拉動的滑桿來進行調整。同理,normalizeimage() 是調整圖片的對比度的,也和修圖軟體的引數值類似。
各類特效
// 模糊效果
$image = new Gmagick('./img/2.jpg');
$image->blurimage(30, 10);
$image->write('./img/2-blur.jpg');
// 運動模糊效果
$image = new Gmagick('./img/2.jpg');
$image->motionblurimage(30, 50, 10);
$image->write('./img/2-motionblur.jpg');
// 徑向模糊效果
//$image = new Gmagick('./img/2.jpg');
//$image->radialblurimage(12.5);
//$image->write('./img/2-radialblur.jpg');
模糊效果中包含三種模糊工具,第一個 blurimage() 方法是普通的模糊功能,它的兩個引數是模糊半徑和標準差,透過調整這兩個引數就可以獲得不同的模糊程度效果。motionblurimage() 運動模糊其實就是有一點斜度的左右拖拽型感覺的模糊效果。最後的徑向模糊效果在測試中一直報錯,也沒有找到原因,看提示像是本身 GraphicsMagick 中不支援這個功能。有用過的瞭解情況的同學可以留言說明下哈!
// 模擬油畫效果
$image = new Gmagick('./img/2.jpg');
$image->oilpaintimage(5);
$image->write('./img/2-oilpaint.jpg');
// 建立模擬3D按扭
$image = new Gmagick('./img/2.jpg');
$image->raiseimage(50, 50, 150, 150, true);
$image->write('./img/2-raise.jpg');
// 木炭效果
$image = new Gmagick('./img/2.jpg');
$image->charcoalimage(10, 3);
$image->write('./img/2-charcoal.jpg');
// 影像應用日光效果
$image = new Gmagick('./img/2.jpg');
$image->solarizeimage(60);
$image->write('./img/2-solarize.jpg');
// 隨機移動圖中的畫素
$image = new Gmagick('./img/2.jpg');
$image->spreadimage(10);
$image->write('./img/2-spread.jpg');
// 圍繞中心旋轉畫素
$image = new Gmagick('./img/2.jpg');
$image->swirlimage(100);
$image->write('./img/2-swirl.jpg');
這一堆效果就不多說了,大家自己可以試試。
總結
看出來了吧,其實 GraphicsMagick 相對於 GD 來說,實現這些修圖方面的效果會非常地簡單。而且這些都是常見的修圖軟體中都會有的功能,也就是說,我們用 PHP 是完全可以做一個類似的線上修圖工具的哦!當然,後面我們學習的 ImageMagick 中也是有這些功能,甚至基本上連方法名字都是一樣的。因此,在學習 ImageMagick 時我們就不詳細地說明每個方法函式的功能了。
另外,GraphicsMagick 還有 GmagickDraw 和 GmagickPixel 兩個物件用於繪製圖形和定義顏色,這兩個物件在 ImageMagick 中也有對應的實現,我們也主要以那邊的學習為主。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2325/viewspace-2796733/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習PHP中YAML操作擴充套件的使用PHPYAML套件
- PHP中非常好玩的Calendar擴充套件學習PHP套件
- PHP中的MySQLi擴充套件學習(三)mysqli的基本操作PHPMySql套件
- 學習PHP中統計擴充套件函式的使用PHP套件函式
- sql中的擴充套件學習SQL套件
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 一起學習PHP中的Tidy擴充套件庫PHP套件
- php mysqli擴充套件庫的使用PHPMySql套件
- PHP 操作 Redis 之 phpredis 擴充套件PHPRedis套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件
- 一起學習PHP中的DS資料結構擴充套件(一)PHP資料結構套件
- 使用 Rust 建立 PHP 擴充套件RustPHP套件
- Intervention 影像切割擴充套件套件
- 好用的擴充套件,pretty-routes,在PHP7.3.9中的使用套件PHP
- 一起了解PHP中YaConf擴充套件的使用PHP套件
- php安裝redis擴充套件及操作redisPHPRedis套件
- PHP實現Bitmap的探索 - GMP擴充套件使用PHP套件
- 用擴充套件的方式在 PHP 中使用 Kafka套件PHPKafka
- 新增php擴充套件PHP套件
- php ubuntu 擴充套件PHPUbuntu套件
- Laravel深入學習7 – 框架的擴充套件Laravel框架套件
- 高擴充套件性的學習路線套件
- PHP中的MySQLi擴充套件學習(二)mysqli類的一些少見的屬性方法PHPMySql套件
- 新增php的memcached擴充套件模組PHP套件
- 安裝PHP的memcache擴充套件PHP套件
- PHP 容器中安裝原始碼包中的擴充套件PHP原始碼套件
- 建立 PHP 擴充套件包步驟 -- 課程學習分享PHP套件
- laradock 中安裝 PHP 擴充套件PHP套件
- 在windows的php中安裝grpc擴充套件WindowsPHPRPC套件
- es6陣列擴充套件的學習陣列套件
- 開發php擴充套件PHP套件
- PHP 擴充套件安裝PHP套件
- PHP7擴充套件PHP套件
- 學習中遇到的擴充摘要
- centos安裝php的oracle擴充套件CentOSPHPOracle套件
- PHP的LZF壓縮擴充套件工具PHP套件
- 【redis學習二】多php版本下phpredis擴充套件安裝RedisPHP套件
- PHP的命令列擴充套件Readline相關函式學習PHP命令列套件函式