摘要:在年初的小程序基礎庫版本更新中,出現了和兩個重要的,補全了像素處理能力,因此,小程序在客戶端進行圖片處理成為了可能。
背景
小程序的canvas是微信基于原生組件自行封裝的,因此接口跟web的canvas有不少區別,早期更是沒有支持像素級的處理能力。
在18年初的小程序基礎庫1.9.0版本更新中,出現了wx.canvasGetImageData和wx.canvasPutImageData兩個重要的API,補全了像素處理能力,因此,小程序在客戶端進行圖片處理成為了可能。
具體可以參考:
偷偷迭代的重磅功能---小程序的像素處理能力
wx.canvasGetImageData
為了嘗試小程序的圖像處理能力,我做了個用于圖片配色分析的小程序-小色卡。
功能主要是:用戶選擇一張圖片,程序會分析圖片的配色,并把配色展示為一張色卡給用戶。用戶可以保存、編輯、復制自己的色卡。這個功能對初級的UI設計師有一定的幫助(可能吧...)。
源碼:github:mini-color-card
體驗小程序:
小程序實現配色分析主要步驟如下:
用戶選擇圖片,拿到imgPath后繪制到canvas上。
通過wx.canvasGetImageData這個接口讀取圖片數據
對圖片數據進行預處理,剔除alpha比較小并且不是白色的點。(非必要)
對圖片像素數據進行聚類。每個像素的顏色可以作為一個三維向量來看。
基本邏輯如下:
wx.chooseImage({ count: 1, sizeType: ["original", "compressed"], sourceType: ["album", "camera"], success: (res) => { wx.getImageInfo({ src: res.tempFilePaths[0], success: (imgInfo) => { let { width, height, imgPath } = imgInfo; let ctx = wx.createCanvasContext(this.canvasID); ctx.drawImage(imgPath,0,0,width,height); ctx.draw(false,()=>{ wx.canvasGetImageData({ canvasId: this.canvasID, x: 0, y: 0, width: width, height: height, success(res) { var pixels = res.data; var pixelCount = width*height; var pixelArray = []; // 對像素數據進行預處理 for (var i = 0, offset, r, g, b, a; i < pixelCount; i = i + quality) { offset = i * 4; r = pixels[offset + 0]; g = pixels[offset + 1]; b = pixels[offset + 2]; a = pixels[offset + 3]; if (a >= 125) { if (!(r > 250 && g > 250 && b > 250)) { pixelArray.push([r, g, b]); } } } var cmap = MMCQ.quantize(pixelArray, colorCount);//聚類,MMCQ是個用于圖像分析的庫 var palette = cmap ? cmap.palette() : null; console.log("配色為:",palette); } }) }) } }) } })小結
一開始我是不想把canvas顯示出來的,只想用它獲取圖像內容,但是實踐下來是不可行的。小程序的canvas并不允許離屏渲染,想要用它進行圖片處理,就要老老實實用它進行展示。
這里只實踐了wx.canvasGetImageData讀取數據進行圖像分析,不過結合wx.canvasPutImageData,濾鏡之類的圖像處理應該都是可以做了。小程序的想象空間還是挺大的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108543.html
摘要:整理收藏一些優秀的文章及大佬博客留著慢慢學習原文協作規范中文技術文檔協作規范阮一峰編程風格凹凸實驗室前端代碼規范風格指南這一次,徹底弄懂執行機制一次弄懂徹底解決此類面試問題瀏覽器與的事件循環有何區別筆試題事件循環機制異步編程理解的異步 better-learning 整理收藏一些優秀的文章及大佬博客留著慢慢學習 原文:https://www.ahwgs.cn/youxiuwenzhan...
摘要:是一個可將轉為微信小程序的渲染庫。用于解決在微信小程序中不能直接渲染的問題。依賴環境需要環境。已經安裝請忽略安裝接口使用轉轉轉數據轉數據示例將添加為小程序工程再克隆到目錄使用小程序開發工具編譯即可 Towxml Towxml 是一個可將HTML、Markdown轉為微信小程序WXML(WeiXin Markup Language)的渲染庫。 用于解決在微信小程序中Markdown、HT...
摘要:是一個可將轉為微信小程序的渲染庫。用于解決在微信小程序中不能直接渲染的問題。依賴環境需要環境。已經安裝請忽略安裝接口使用轉轉轉數據轉數據示例將添加為小程序工程再克隆到目錄使用小程序開發工具編譯即可 Towxml Towxml 是一個可將HTML、Markdown轉為微信小程序WXML(WeiXin Markup Language)的渲染庫。 用于解決在微信小程序中Markdown、HT...
摘要:最重要的就是找一個適合自己的主題了。事實上,免費主題也非常多,而且很多的免費主題在功能上和界面美觀上已經大大超過了付費的主題。加上這些主題都是開源的,基本上可以在上找得到源碼,安全性是沒有問題,主題的作者也在不斷更新當中。WordPress最重要的就是找一個適合自己的主題了。好一點的WordPress主題基本上都是要收費的,而且價格還不便宜,這導致了不少的新手朋友們很為難。而有時我們僅僅根據...
閱讀 1184·2021-10-11 10:59
閱讀 1966·2021-09-29 09:44
閱讀 857·2021-09-01 10:32
閱讀 1431·2019-08-30 14:21
閱讀 1875·2019-08-29 15:39
閱讀 2982·2019-08-29 13:45
閱讀 3539·2019-08-29 13:27
閱讀 2012·2019-08-29 12:27