小程序圖片添加文字水印

公司需求:小程序上傳圖片,添加文字水印
完成經(jīng)過:一堆坑

1.官方文檔
官方文檔地址如下:
https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html
小程序有兩種canvas寫法止潮,可不要搞混了
2.獲取圖片寬高

小程序添加文字旅赢,需要使用canvas重新繪制canvas圖片,需要設(shè)定寬高洲押。
wx.getImageInfo獲取原始圖片寬高

    getInfo() {
        wx.getImageInfo({
            src: this.data.url, 
            success(res) {
                console.log(res.path)//可以獲取圖片路徑,圖片長寬等信息
            }
        })
    }
3.不能使用線上url圆凰,只能使用本地臨時圖片路徑
使用canvas的時候杈帐,如果是線上url會報(bào)錯,必須使用臨時圖片路徑(tempUrl),
格式如下:
http://tmp/dLBG6wXVqhdBca99922121344e8d69bad5aa34f404ea.png
獲取辦法:
使用wx.getImageInfo方法挑童,無論src是臨時圖片路徑還是線上url累铅,都返回臨時圖片路徑
4.canvas基本用法
  <!-- type有兩種,必須寫-->
  <canvas type="2d" id="myCanvas"></canvas>
const query = wx.createSelectorQuery()
    query.select('#myCanvas')
      .fields({ node: true, size: true })
      .exec((res) => {
        const canvas = res[0].node
        const ctx = canvas.getContext('2d')

        const dpr = wx.getSystemInfoSync().pixelRatio
        canvas.width = res[0].width * dpr
        canvas.height = res[0].height * dpr
        ctx.scale(dpr, dpr)

        ctx.fillRect(0, 0, 100, 100)
      })
5.canvas轉(zhuǎn)為圖片
transferCanvasToImage(canvas) {
        const that = this;
        wx.canvasToTempFilePath({
            canvas: canvas,
            success(res) {
                console.log('canvas分享圖片地址', res.tempFilePath)
                var src = res.tempFilePath
                that.setData({
                    src
                })
            }
      })
 },
6.隱藏canvas不顯示

公司需求:隱藏掉canvas不顯示站叼,但是可以使用娃兽。
結(jié)果:不能用使用wx:if和display:none,我沒有找到好的辦法尽楔,最后只能在外面加一層

<view>
    <view wx:if="{{canvasImg}}">
        <image src="{{canvasImg}}" mode="widthFix" style="width:750rpx"></image>
    </view>
    <view style='width:0rpx;height:0rpx;overflow:hidden;'>
        <canvas id='canvasId' type="2d" style="position:fixed;left:9999px"></canvas>
    </view>
</view>
7.demo核心代碼
<view>
    <view wx:if="{{canvasImg}}">
        <image src="{{canvasImg}}" mode="widthFix" style="width:750rpx"></image>
    </view>
    <view style='width:0rpx;height:0rpx;overflow:hidden;'>
        <canvas id='canvasId' type="2d" style="position:fixed;left:9999px"></canvas>
    </view>
</view>
Page({
    data: {
        img: 'https://inews.gtimg.com/newsapp_bt/0/15084535902/1000',
        canvasImg: '',//生成的canvasImg
        canvasId: 'canvasId',
    },
    onLoad() {
        this.getCanvas()
    },
    getCanvas() {
        var mycenter = 0 //文字左右居中顯示
        var myheight = 0 //文字高度
        const that = this
        const query = wx.createSelectorQuery();
        query.select('#' + this.data.canvasId).fields({ node: true, size: true }).exec((res) => {
            console.log(res)
            const canvas = res[0].node;
            const ctx = canvas.getContext('2d')
            new Promise(function (resolve) {
                // 繪制背景圖片
                wx.getImageInfo({
                    src: that.data.img, //網(wǎng)絡(luò)圖片,如果不行請換一個
                    success(res) {
                        console.log(res)
                        var width = res.width
                        var height = res.height
                        mycenter = width / 2
                        myheight = height
                        canvas.width = width
                        canvas.height = height
                        const img = canvas.createImage();
                        img.src = res.path;
                        img.onload = () => {
                            ctx.drawImage(img, 0, 0, width, height);
                            resolve(true);
                        }
                    }
                })
            }).then(() => {
                ctx.font = "500 32px Arial";
                ctx.textAlign = 'center'
                ctx.fillStyle = 'white';
                ctx.fillText('adakfjlkawdjfklasjfklasjf', mycenter, myheight - 50)
            }).then(function () {
                that.transferCanvasToImage(canvas)
            }).catch((err) => { })
        })
    },
//canvas轉(zhuǎn)為圖片
    transferCanvasToImage(canvas) {
        const that = this;
        wx.canvasToTempFilePath({
            canvas: canvas,
            success(res) {
                that.setData({
                    canvasImg: res.tempFilePath
                })
                console.log(that.data.canvasImg)
            }
        })
    },
})

參考資料:
1.官方文檔
https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html

  1. https://blog.csdn.net/qq_33769914/article/details/125148615
  2. https://jishuin.proginn.com/p/763bfbd5f828
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末投储,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阔馋,更是在濱河造成了極大的恐慌玛荞,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呕寝,死亡現(xiàn)場離奇詭異勋眯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)下梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門客蹋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孽江,你說我怎么就攤上這事嚼酝。” “怎么了竟坛?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钧舌。 經(jīng)常有香客問我担汤,道長,這世上最難降的妖魔是什么洼冻? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任崭歧,我火速辦了婚禮,結(jié)果婚禮上撞牢,老公的妹妹穿的比我還像新娘率碾。我一直安慰自己,他們只是感情好屋彪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布所宰。 她就那樣靜靜地躺著,像睡著了一般畜挥。 火紅的嫁衣襯著肌膚如雪仔粥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音躯泰,去河邊找鬼谭羔。 笑死,一個胖子當(dāng)著我的面吹牛麦向,可吹牛的內(nèi)容都是我干的瘟裸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼诵竭,長吁一口氣:“原來是場噩夢啊……” “哼话告!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秀撇,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤超棺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呵燕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棠绘,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年再扭,在試婚紗的時候發(fā)現(xiàn)自己被綠了氧苍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡泛范,死狀恐怖让虐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罢荡,我是刑警寧澤赡突,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站区赵,受9級特大地震影響惭缰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笼才,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一漱受、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骡送,春花似錦昂羡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至派敷,卻和暖如春赴穗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工般眉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留了赵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓甸赃,卻偏偏與公主長得像柿汛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埠对,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容