小程序生成圖片并保存到手機(jī)

才意識(shí)到及時(shí)總結(jié)和做筆記的重要性科平。很多東西都是用的時(shí)候查,用完就忘了姜性,下次還要繼續(xù)查瞪慧,關(guān)鍵是依然看不懂。哎部念,心累弃酌。雖然現(xiàn)在寫了也不一定記住,但是復(fù)制自己寫的代碼總歸容易一點(diǎn)儡炼。
還有妓湘,今晚不想加班啊啊啊啊啊。
讓我回家早睡吧射赛。
再加下去我這一頭茂密的秀發(fā)就要保不住了多柑。
哭唧唧。

image.png

好了好了楣责,哭著也要搬磚竣灌。
我也是參考別人的https://blog.csdn.net/qq_37375882/article/details/79419596。還有php代碼(雖然我看不懂)秆麸,有需要的小伙伴建議參考喔(迷妹臉)初嘹。
關(guān)于canvas寬度自適應(yīng):https://blog.csdn.net/zSY_snake/article/details/81188128
關(guān)于canvas繪制圓形頭像:https://www.cnblogs.com/-mrl/p/9072009.html
關(guān)于canvas繪制圖片:https://developers.weixin.qq.com/miniprogram/dev/api/CanvasContext.drawImage.html
關(guān)于canvas繪制網(wǎng)絡(luò)圖片:https://blog.csdn.net/qq_30641447/article/details/79377784?from=singlemessage
(現(xiàn)在被我改的很亂,有空再整理主要是參考沮趣,有問題可以評(píng)論問我

想要的效果圖(紫色的虛線框不知道哪來的屯烦,請(qǐng)忽略。):


image.png

好了房铭,上我自己的代碼:

<view class='canvas_box'>
  <canvas style="margin:0 auto;width:375px; height:596px;" canvas-id="myCanvas" hidden="{{canvasHidden}}"></canvas>
  <view class='canvas_btn' bindtap='savetup'>
    <image src='/pages/image/btn_bg.png'></image>
    保存圖片
  </view>
</view>
<view class='canvas_sign'>保存圖片到手機(jī)后驻龟,您可以到朋友圈分享該折扣</view>
page{background:#fff;}
.canvas_box{width:750rpx;height:1140rpx;position:relative;}
.canvas_btn{position:absolute;width:360rpx;height:70rpx;line-height:64rpx;left:196rpx;bottom:-35rpx;text-align:center;color:#fff;z-index:2;}
.canvas_btn image{position:absolute;width:360rpx;height:70rpx;top:0;left:0;z-index:-1 !important;}
.canvas_sign{text-align:center;margin:20rpx 0;color:#959595;margin-top:60rpx;}
data: {
    bgImgPath: '/pages/image/cloth.png',//封面大圖
    xcxcode:"/pages/image/loved.png",//二維碼
    price:'159',//價(jià)格
    title:'nazze 日系工裝飛行員冬季夾克男',//標(biāo)題
  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面加載
   */
  onLoad: function (options) {
    var that = this;
    that.setData({
      // nickName: app.globalData.userInfo.nickName,
      // avatarUrl: app.globalData.userInfo.avatarUrl
      nickName: '樂生',
      avatarUrl: ''//這是你的頭像地址
    })
    
    //1. 請(qǐng)求后端API生成小程序碼
    //that.getQr();

    //2. canvas繪制文字和圖片
    const ctx = wx.createCanvasContext('myCanvas');
    var imgPath = '/pages/image/canvas.png';//黃色邊框
    var avatarUrl = that.data.avatarUrl;//頭像
    var nickName = that.data.nickName;//昵稱
    var bgImgPath = that.data.bgImgPath;//封面大圖
    var basicprofile = '/pages/image/zhiwen.png';//指紋圖片
    var xcxcode = that.data.xcxcode;//二維碼
    var price = that.data.price;//價(jià)格
    var title=that.data.title;//標(biāo)題

    //填充背景(圖片的白色背景)
    ctx.setFillStyle('#ffffff');
    ctx.fillRect(0, 0, 375, 596);//坐標(biāo)和寬高

    // 第一張圖片(黃色邊框)
    ctx.drawImage(imgPath, 18, 26, 340, 544);

    // 第二張圖片(頭像)
    ctx.drawImage(avatarUrl, 158, 47, 60, 60);

    //繪制昵稱
    ctx.setFontSize(15);
    ctx.setFillStyle('#000000');
    ctx.fillText(nickName, 173, 127);

    //繪制標(biāo)題
    ctx.setFontSize(18);
    ctx.setFillStyle('#000000');
    ctx.fillText('發(fā)起了一個(gè)折扣詳情', 107, 163); 

    // 第三張圖片(封面大圖)
    ctx.drawImage(bgImgPath, 38, 185, 300, 162);

    //繪制符號(hào)¥
    ctx.setFontSize(15);
    ctx.setFillStyle('#DDB039');
    ctx.fillText('¥', 160, 379);

    //繪制價(jià)格
    ctx.setFontSize(26);
    ctx.setFillStyle('#DDB039');
    ctx.fillText(price, 174, 381);

    //繪制標(biāo)題
    ctx.setFontSize(15);
    ctx.setFillStyle('#000');
    ctx.fillText(title, 57, 410);

    //繪制一條虛線

    // ctx.strokeStyle = 'blue';
    // ctx.beginPath();
    // ctx.setLineWidth(1);
    // ctx.setLineDash([2, 4]);
    // ctx.moveTo(10, 287);
    // ctx.lineTo(230, 287);
    // ctx.stroke();

    //繪制指紋圖標(biāo)
    ctx.drawImage(basicprofile, 76, 438, 67, 66);
    ctx.setFontSize(11);
    ctx.setFillStyle('#000');
    ctx.fillText('長按識(shí)別小程序碼', 66, 526);

    //繪制二維碼
    ctx.drawImage(xcxcode, 218, 426, 102, 102);

    ctx.draw();

  },
  savetup: function () {
    var that = this;
    wx.canvasToTempFilePath({
      x: 0,
      y: 0,
      width: 375,
      height: 596,
      destWidth: 375,
      destHeight: 596,
      canvasId: 'myCanvas',
      success: function (res) {
        //調(diào)取小程序當(dāng)中獲取圖片
        console.log(res.tempFilePath);
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success(res) {
            wx.showModal({
              title: '圖片保存成功!',
              content: '請(qǐng)將圖片分享到朋友圈',
              showCancel: false,
              confirmText: '知道了',
              confirmColor: '#72B9C3',
              success: function (res) {
                if (res.confirm) {
                  console.log('用戶點(diǎn)擊確定');
                }
              }
            })
          }
        })
      },
      fail: function (res) {
        console.log(res)
      }
    })
  },

最終效果圖(紅色小心心那里應(yīng)該是二維碼):


wxc5a2dd32fd69cc6d.o6zAJs8z7fmUIAYqvc_i4B-emrXU.zTkK0qqj7PVGf6f9aa7b4cae6660597986e9b8fa2d05.png

圖片路徑和文字改成自己的缸匪,粘過去就能用翁狐。改改坐標(biāo)啥的就行。如果有疑問請(qǐng)?jiān)u論凌蔬,我已經(jīng)滿腦子漿糊在崩潰的邊緣試探露懒。
加班加到想吐啊啊啊按忱洹(也有可能是奶茶喝多了)
一個(gè)很好用的東西,canvas文字居中:

ctx.setTextAlign('center')
ctx.fillText('這是一段文字', 187 * upx, 122 * upx);//187是中軸線

官網(wǎng):https://developers.weixin.qq.com/miniprogram/dev/api/CanvasContext.setTextAlign.html?search-key=ctx.setTextAlign(%27center%27)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懈词,一起剝皮案震驚了整個(gè)濱河市蛇耀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坎弯,老刑警劉巖纺涤,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荞怒,居然都是意外死亡洒琢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門褐桌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衰抑,“玉大人,你說我怎么就攤上這事荧嵌∏河唬” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵啦撮,是天一觀的道長谭网。 經(jīng)常有香客問我,道長赃春,這世上最難降的妖魔是什么愉择? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮织中,結(jié)果婚禮上锥涕,老公的妹妹穿的比我還像新娘。我一直安慰自己狭吼,他們只是感情好层坠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刁笙,像睡著了一般破花。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疲吸,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天座每,我揣著相機(jī)與錄音,去河邊找鬼摘悴。 笑死尺栖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烦租。 我是一名探鬼主播延赌,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叉橱!你這毒婦竟也來了挫以?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤窃祝,失蹤者是張志新(化名)和其女友劉穎掐松,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粪小,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡大磺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了探膊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杠愧。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逞壁,靈堂內(nèi)的尸體忽然破棺而出流济,到底是詐尸還是另有隱情,我是刑警寧澤腌闯,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布绳瘟,位于F島的核電站,受9級(jí)特大地震影響姿骏,放射性物質(zhì)發(fā)生泄漏糖声。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一分瘦、第九天 我趴在偏房一處隱蔽的房頂上張望蘸泻。 院中可真熱鬧,春花似錦擅腰、人聲如沸蟋恬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歼争。三九已至,卻和暖如春渗勘,著一層夾襖步出監(jiān)牢的瞬間沐绒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工旺坠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乔遮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓取刃,卻偏偏與公主長得像蹋肮,于是被迫代替她去往敵國和親出刷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,262評(píng)論 25 707
  • 用兩張圖告訴你坯辩,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料馁龟? 從這篇文章中你...
    hw1212閱讀 12,744評(píng)論 2 59
  • 寫作改抡,高大上矢炼、使人敬仰。通過文字阿纤,傳播思想或者故事或者心靈契約的宣導(dǎo)句灌。把靈魂和文字雜糅,神圣的產(chǎn)物阵赠。 在有了網(wǎng)絡(luò)涯塔,...
    走在雨的縫中閱讀 217評(píng)論 5 3
  • 小美在這座城市出生讀書,大學(xué)也沒有例外的留在了這座城市清蚀。 在大學(xué)里匕荸,她認(rèn)識(shí)了小柏,一個(gè)高高瘦瘦話不是很多的南方大男...
    米小米_V587閱讀 160評(píng)論 0 0
  • 我看見身體灌滿了水枷邪,心臟是唯一的一片陸地榛搔。心上的邊界圍成座城,城里都是人东揣,當(dāng)水咆哮襲來的時(shí)候践惑,他們繼續(xù)著自己...
    夕乜閱讀 423評(píng)論 0 0