乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      學習PHP中好玩的Gmagick圖像操作擴展的使用

       硬核項目經(jīng)理 2021-08-09

      學習PHP中好玩的Gmagick圖像操作擴展的使用

      在 PHP 的圖像處理領域,要說最出名的 GD 庫為什么好,那就是因為它不需要額外安裝的別的什么圖像處理工具,而且是隨 PHP 源碼一起發(fā)布的,只需要在安裝 PHP 的時候添加上編譯參數(shù)就可以了。

      GD 庫雖然已經(jīng)可以幫助我們處理很多事情了,比如圖片的簡單繪制、加水印、縮放等,但業(yè)務需求往往更加的多樣和豐富,比如我們今天需要像 PS 一樣能夠讓圖片翻轉、模糊之類的功能,僅靠 GD 庫就非常麻煩了。

      當然,可能有不少的同學應該用過 ImageMagick ,不過我們今天先來介紹的可不是 ImageMagick ,而是它的一個分支軟件 GraphicsMagick 。GraphicsMagick 是從 ImageMagick 5.5.2 中 fork 出來的一個分支。它相對于 ImageMagick 來說并沒有什么新的特性,只是更加的專注于穩(wěn)定性和性能方面。

      所以呢,我們學習的重點將放在后面的 ImageMagick 中,對于 GraphicsMagick 就通過這篇文章簡單地了解一下吧!

      安裝

      首先,我們需要在系統(tǒng)中安裝 GraphicsMagick ,然后再安裝 PHP 中的 Gmagick 擴展。具體的安裝過程可以參考下面的鏈接:

      https://www.jianshu.com/p/7c4e02a84641

      加載圖片及查看圖片信息

      第一步還是來簡單地看一下如何加載初始化 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 http://www.GraphicsMagick.org/www/Copyright.html 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"22)->oilpaintimage(0.3);
      $image->write('./img/2-border.jpg');

      通過 borderimage() 方法就可以非常簡單地給圖片加上一個寬高為 2 像素的綠色邊框。oilpaintimage() 是為圖片添加一個油畫效果,看出來了嗎,Gmagick 實例化后的對象中的方法是可以鏈式調用的。只要當前你使用的方法返回的也是 Gmagick 對象就可以了。

      裁剪圖片及縮略圖

      $image = new Gmagick('./img/2.jpg');
      $image->resizeimage(150150101);
      $image->write('./img/2-resize.jpg');

      $image = new Gmagick('./img/2.jpg');
      $image->scaleimage(150150);
      $image->write('./img/2-scale.jpg');

      這兩個方法,resizeimage() 和 scaleimage() 都可以用來改變圖片的大小,resizeimage() 會以通道的方式進行操作,不過實際的使用情況其實并沒有太明顯的差別。

      // 縮略圖
      $image = new Gmagick('./img/2.jpg');
      $image->thumbnailimage(1000);
      $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() 是直接生成縮略圖,它的目標是制作適合在網(wǎng)上顯示的小的低成本縮略圖圖象,我們可以只填一個寬或者只填一個高,圖像就會自動等比例地綻放到指定的大小。cropthumbnailimage() 則是先通過縮小圖像,然后從中心裁剪指定區(qū)域來創(chuàng)建固定大小的縮略圖。其實它們從簡單的測試表現(xiàn)來看,區(qū)別也并不是很大。

      minifyimage() 則是直接等比例地將圖片縮小一半,所以這個方法不需要任何參數(shù)。

      圖片旋轉、偏移

      // 垂直翻轉
      $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(150150);
      $image->write('./img/2-roll.jpg');

      flipimage() 和 flopimage() 是直接將圖片進行垂直和水平地翻轉,rotateimage() 則是根據(jù)指定的角度來旋轉圖片,第一個參數(shù)是旋轉之后我們要給旋轉經(jīng)過的地方留下的背景色。rollimage() 的效果是偏移圖片,就是將圖片的位置在原始尺寸中進行偏移,這個效果說出來可能有點不太好理解,大家可以自己試一下,比較炫酷哦。

      圖片顏色效果調整

      // 調亮度、飽和度、色調
      $image = new Gmagick('./img/2.jpg');
      $image->modulateimage(808080);
      $image->write('./img/2-modulate.jpg');

      // 顏色對比度
      $image = new Gmagick('./img/2.jpg');
      $image->normalizeimage(30);
      $image->write('./img/2-normalize.jpg');

      modulateimage() 直接通過三個參數(shù)來對應地調整圖片的亮度、飽和度和色調,它們的取值是 -100 到 100 之間的整數(shù)。這個其實就和 PS 中相關的圖片調整工具類似,在 PS 或者各種修圖軟件中都會是一個上下拉動的滑桿來進行調整。同理,normalizeimage() 是調整圖片的對比度的,也和修圖軟件的參數(shù)值類似。

      各類特效

      // 模糊效果
      $image = new Gmagick('./img/2.jpg');
      $image->blurimage(3010);
      $image->write('./img/2-blur.jpg');

      // 運動模糊效果
      $image = new Gmagick('./img/2.jpg');
      $image->motionblurimage(305010);
      $image->write('./img/2-motionblur.jpg');

      // 徑向模糊效果
      //$image = new Gmagick('./img/2.jpg');
      //$image->radialblurimage(12.5);
      //$image->write('./img/2-radialblur.jpg');

      模糊效果中包含三種模糊工具,第一個 blurimage() 方法是普通的模糊功能,它的兩個參數(shù)是模糊半徑和標準差,通過調整這兩個參數(shù)就可以獲得不同的模糊程度效果。motionblurimage() 運動模糊其實就是有一點斜度的左右拖拽型感覺的模糊效果。最后的徑向模糊效果在測試中一直報錯,也沒有找到原因,看提示像是本身 GraphicsMagick 中不支持這個功能。有用過的了解情況的同學可以留言說明下哈!

      // 模擬油畫效果
      $image = new Gmagick('./img/2.jpg');
      $image->oilpaintimage(5);
      $image->write('./img/2-oilpaint.jpg');

      // 創(chuàng)建模擬3D按扭
      $image = new Gmagick('./img/2.jpg');
      $image->raiseimage(5050150150true);
      $image->write('./img/2-raise.jpg');

      // 木炭效果
      $image = new Gmagick('./img/2.jpg');
      $image->charcoalimage(103);
      $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 來說,實現(xiàn)這些修圖方面的效果會非常地簡單。而且這些都是常見的修圖軟件中都會有的功能,也就是說,我們用 PHP 是完全可以做一個類似的在線修圖工具的哦!當然,后面我們學習的 ImageMagick 中也是有這些功能,甚至基本上連方法名字都是一樣的。因此,在學習 ImageMagick 時我們就不詳細地說明每個方法函數(shù)的功能了。

      另外,GraphicsMagick 還有 GmagickDraw 和 GmagickPixel 兩個對象用于繪制圖形和定義顏色,這兩個對象在 ImageMagick 中也有對應的實現(xiàn),我們也主要以那邊的學習為主。

      測試代碼:

      https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/4.學習PHP中好玩的Gmagick圖像操作擴展的使用(一).php

      參考文檔:

      https://www./manual/zh/book.gmagick.php

        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多