nodejs本身不太擅長處理圖片視頻等計算密集性的功能,所以需要第三方的非nodejs庫或工具來實現(xiàn)此功能。
這里就使用了多媒體處理開源庫ffmpeg,其中的drawtext濾鏡就可以高效的實現(xiàn)圖片添加文字水印功能。drawtext濾鏡詳細文檔在這里可以查看 https://ffmpeg.org/ffmpeg-filters.html#drawtext-1
詳細代碼如下
import execcmd from 'child_process'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'node:url'
import { stderr, stdout } from 'process'
import util from 'util'
const exec = util.promisify(execcmd.exec)
let curDir = fileURLToPath(new URL('./', import.meta.url))
let picFile = "test.jpg"
let processedPicFile = "processedtest.jpg"
var cmdstr = "ffmpeg -i " + picFile
cmdstr += " -vf \"drawtext=fontfile=./tmp/msyhbd.ttc:fontsize=16:x=(w - 10 - text_w):y=10:fontcolor=white:text='凸然(tr.zhiyakeji.com)':shadowx=4:shadowy=4:alpha=0.5\""
cmdstr += " -y " + processedPicFile
const { stdout, stderr } = await exec(cmdstr)
console.error(stderr)
上面主要是通過nodejs的命令行執(zhí)行工具類import execcmd from 'child_process'來執(zhí)行ffmpeg命令來添加水印。
相關(guān)命令行參數(shù)解釋如下:
-
fontfile=./tmp/msyhbd.ttc
表示的是字體文件的路徑,msyhbd.ttc文件是從Windows系統(tǒng)目錄下的fonts文件夾中拷貝出來的。本來是沒必要的,但可能使用的版本對c:/Windows/Fonts目錄中的冒號處理有問題,導(dǎo)致始終提示找不到字體,從而文字為中文時會是亂碼。 -
fontsize=16
字體大小,默認為16。 -
x=(w - 10 - text_w)
文字的x坐標,上面的表達式意思是水印在右上角,w表示圖片寬度,text_w表示的是文字的寬度 -
y=10
文字所在的y坐標。 -
fontcolor=white
文字顏色。 -
text='凸然(tr.zhiyakeji.com)'
文字內(nèi)容。 -
shadowx=4:shadowy=4
文字陰影x,y坐標偏移量,陰影默認是黑色的,可以通過shadowcolor來設(shè)置。 -
alpha=0.5
水印透明度0.0到1.0之間。
版權(quán)聲明:本文為凸然網(wǎng)站的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:nodejs中使用ffmpeg給圖片添加文字水印