欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs下使用gm圓形裁剪并合成圖片的示例

 更新時間:2018年02月22日 11:56:32   作者:Zealseeker''s Blog  
本篇文章主要介紹了Nodejs下使用gm圓形裁剪并合成圖片的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

說到Nodejs下的圖片處理可能第一想到就是gm,gm底層可以是GraphicsMagic(其實也是gm的由來),也可以是ImageMagick(其實GraphicsMagic本身也是從ImageMagic分割而來,現(xiàn)在獨立了)。雖然這兩個工具本身都不是js實現(xiàn),所以需要額外安裝,不過此工具非常常見,可能已經(jīng)預(yù)裝在linux系統(tǒng)下,而且安裝也很方便,所以不用因為看到是“第三方”就放棄。雖然說這兩個軟件都只是底層,無需關(guān)心,可筆者在實踐中發(fā)現(xiàn)必須得用GraphicsMagic,所以這里就只介紹GraphicsMagics的安裝與使用。

GaphicsMagic 安裝

GraphicsMagic 官網(wǎng)是: http://www.graphicsmagick.org/

官網(wǎng)和網(wǎng)上大多數(shù)教程都是教如何編譯,可個人覺得可以直接通過軟件庫安裝,比如

apt-get install graphicsmagic

如果要學(xué)習(xí)用命令行的方式使用GraphicsMagic可以看這里:http://www.dbjr.com.cn/LINUXjishu/120332.html

Nodejs下的gm安裝

gm是一個node庫,所以可用npm安裝

npm install gm

官方文檔: http://aheckmann.github.io/gm/

圓形剪裁原理

gm是對GraphicsMagic的封裝,所以理論上GraphicsMagic有的功能都能通過gm以接口的形式實現(xiàn)。gm本身不支持圓形剪裁(至少筆者不知如何實現(xiàn)),同樣意味著其底層也不直接支持。

gm比較常用的功能是:縮放、方形裁剪、格式轉(zhuǎn)換。

所以本教程的圓形裁剪的核心是 借助SVG ,通過svg構(gòu)建一個圓形的圖片,然后通過gm轉(zhuǎn)化為png,即利用svg變換圖片格式。

SVG是可以實現(xiàn)圓形圖片的裁剪的,網(wǎng)上查到有兩種方式實現(xiàn)圓形裁剪

1、通過clip-path

定義一個圓形的路徑,然后在圖片的style中設(shè)置clip-path,也就是通過這個這樣實現(xiàn)圖片裁剪,理論上是真正意義上的“裁剪”

<svg>
  <defs>
    <clipPathid="clipPath">
      <circlecx="5"cy="5"r="5"/>
    </clipPath>
  </defs>
  <imagestyle="clip-path: url(#clipPath);"href="{{icon_img}}" rel="external nofollow" rel="external nofollow" x="0"y="0"width="10"height="10"/> 
</svg>

如果用clip-path可以看這個教程

可是這樣的配置在瀏覽器上看沒有絲毫問題,但是發(fā)現(xiàn)通過gm轉(zhuǎn)化為png后,style沒有任何效果,還是方形的。

2、通過circle標(biāo)簽

<svg>
  <defs>
    <patternpatternUnits="userSpaceOnUse"id="raduisImage"x="0"y="0"width="10"height="10">
      <imagehref="{{icon_img}}" rel="external nofollow" rel="external nofollow" x="0"y="0"width="10"height="10"/>
    </pattern>
  </defs>
  <circlecx="5"cy="5"r="5"fill="url(#raduisImage)"></circle>
</svg>

先定義一個圖案,也就是原來的圖片,然后創(chuàng)建個圓形,并用剛剛定義的圖案填充在這個圓形里面即可。

合成圖片原理

懂的上述剪裁的原理,合成就變得簡單了。直接把想要合成的圖片以svg的方式拼湊在一起即可。雖然gm本身支持圖片合成,使用compose或者mosaic (詳見這個 教程 )不過感覺不如svg更加明了。

注意筆者嘗試通過svg加上文字,不過發(fā)現(xiàn)中文字無法被識別,所以仍然只能通過gm添加,添加時需要設(shè)置字體(詳見下一章代碼實現(xiàn))

如果要在一個大圖里嵌入兩張圓形的圖片,則需要設(shè)置兩個pattern,這時有個經(jīng)驗:

  1. pattern的x和y設(shè)置為0,0
  2. pattern的width和height設(shè)置的和 畫布 一樣
  3. image的x,y設(shè)置為其 “實際位置” ,也就是對應(yīng) circle 的 cx-r 以及 cy-r ,剪 r 是因為cx和cy指的是圓形中心,而x,y是圖形的左上角位置。

代碼實現(xiàn)

const gm = require('gm')
const fs = require('fs')
let templateSVG = "/path/to/original.svg"
let outputSVG = "/path/to/repalced.svg"
let input = "/path/to/icon.png"
let font = "/path/to/font.ttf"
let fontColor = "white"
let fontSize = 10

fs.readFile(templateSVG,'utf-8',function(err,data){
  if (err) throw err
  var d = data.replace('{{icon_img}}',input)
  fs.writeFile(outputSVG,d,function(err){
    if (err) throw err
    gm(outputSVG)
    .font(font)
    .fill(fontColor)
    .fontSize(fontSize)
    .drawText(textPosition[0], textPosition[1], text)//
    .write(output,function(err){
      if(err) cb(err)
      // next
    })
  })
})

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node Mongoose用法詳解【Mongoose使用、Schema、對象、model文檔等】

    Node Mongoose用法詳解【Mongoose使用、Schema、對象、model文檔等】

    這篇文章主要介紹了Node Mongoose用法,結(jié)合實例形式分析了Mongoose使用、Schema、對象、model文檔等基本原理、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05
  • node上的redis調(diào)用優(yōu)化示例詳解

    node上的redis調(diào)用優(yōu)化示例詳解

    這篇文章主要給大家介紹了關(guān)于node上redis調(diào)用優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 切換Node.js鏡像源的方法詳解

    切換Node.js鏡像源的方法詳解

    Node.js 是一個非常流行的 JavaScript 運行環(huán)境,擁有許多強大的功能和庫,使得它在 Web 開發(fā)、服務(wù)器端編程等領(lǐng)域中廣泛使用,在本文中,我們將介紹如何切換 Node.js 的鏡像源,并提供一些思考和難點,幫助讀者更好地理解這個問題,需要的朋友可以參考下
    2024-01-01
  • NodeJs模擬登陸正方教務(wù)

    NodeJs模擬登陸正方教務(wù)

    網(wǎng)上已經(jīng)有很多關(guān)于模擬登陸正方教務(wù)的作品了,基于 PHP,Python,Java,.Net 加上NodeJs,這幾門語言都可以實現(xiàn)模擬登陸,模擬登陸的技術(shù)點不是特別難,這里記錄一下利用Node碰到的一些坑,以及一些解決思路。
    2017-04-04
  • Node 使用express-http-proxy 做api網(wǎng)關(guān)的實現(xiàn)

    Node 使用express-http-proxy 做api網(wǎng)關(guān)的實現(xiàn)

    這篇文章主要介紹了Node 使用express-http-proxy 做api網(wǎng)關(guān)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Node.js與MySQL交互操作及其注意事項

    Node.js與MySQL交互操作及其注意事項

    這篇文章給大家主要介紹了Node.js與MySQL交互操作及其注意事項,非常的詳細(xì),有相同需求的小伙伴可以參考下
    2016-10-10
  • nodejs實現(xiàn)大文件(在線視頻)的讀取

    nodejs實現(xiàn)大文件(在線視頻)的讀取

    這篇文章主要為大家詳細(xì)介紹了nodejs實現(xiàn)大文件的讀取,比如在線視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Node.js?子線程Crash?問題的排查方法

    Node.js?子線程Crash?問題的排查方法

    這篇文章主要介紹了Node.js?子線程Crash?問題的排查,本文通過代碼例子給大家詳細(xì)講解,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 詳解HTTPS 的原理和 NodeJS 的實現(xiàn)

    詳解HTTPS 的原理和 NodeJS 的實現(xiàn)

    這篇文章主要介紹了詳解HTTPS 的原理和 NodeJS 的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 基于node下的http小爬蟲的示例代碼

    基于node下的http小爬蟲的示例代碼

    本篇文章主要介紹了基于node下的http小爬蟲的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論