小編給大家分享一下如何通過canvas轉(zhuǎn)換顏色為RGBA格式,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站是一家網(wǎng)站設(shè)計(jì)公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營產(chǎn)品:成都響應(yīng)式網(wǎng)站建設(shè)公司、品牌網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡(luò)互動的體驗(yàn),以及在手機(jī)等移動端的優(yōu)質(zhì)呈現(xiàn)。網(wǎng)站制作、網(wǎng)站建設(shè)、移動互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營、VI設(shè)計(jì)、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價(jià)值服務(wù)。
轉(zhuǎn)換任意顏色為RGBA格式
前端編程過程中,經(jīng)常會遇到要把各種顏色格式(比如 “red”、“#F00”、“#FF0000”等)轉(zhuǎn)換成RGBA格式,搜索網(wǎng)絡(luò)也可以發(fā)現(xiàn)一堆的解決方案:
此處介紹一種方法: 通過canvas的像素獲取方法,來獲取任意顏色的RGBA數(shù)值。大致步驟如下:
首先創(chuàng)建一個(gè)尺寸為1*1的canvas,并獲取canvas的繪制上下文ctx
設(shè)置ctx.fillStyle為指定的顏色
通過ctx.fillRect填充canvas
通過ctx.getImaegeData獲取Imagedata對象,并獲取其中的像素值,獲取的像素值正好是RGBA格式的。
示例代碼如下:
function getRgba(color) { var canvas = document.createElement("canvas"); canvas.width = 1; canvas.height = 1; var ctx = canvas.getContext('2d'); ctx.fillStyle = color; ctx.fillRect(0, 0, 1, 1); var colorData = ctx.getImageData(0, 0, 1, 1).data; return { r: colorData[0], g: colorData[1], b: colorData[2], a: colorData[3] }; }
注意性能問題
需要注意的是,如果上述方法頻繁調(diào)用,則會有性能問題, 我公司一個(gè)小伙伴就出現(xiàn)過這樣的性能問題。因?yàn)榇a在頻繁的創(chuàng)建canvas對象, 不斷創(chuàng)建對象會有性能損耗,而JavaScript本身還需要在垃圾回收階段不斷的回收這些創(chuàng)建的對象,也是一次性能消耗。
好的處理方式是創(chuàng)建一個(gè)全局的canvas對象,每次都復(fù)用該對象。只用做很小的改動,參考下面的代碼 :
var canvas = document.createElement("canvas"); canvas.width = 1; canvas.height = 1; var ctx = canvas.getContext('2d'); function getRgba(color) { ctx.fillStyle = color; ctx.fillRect(0, 0, 1, 1); var colorData = ctx.getImageData(0, 0, 1, 1).data; return { r: colorData[0], g: colorData[1], b: colorData[2], a: colorData[3] }; }
以上是“如何通過canvas轉(zhuǎn)換顏色為RGBA格式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!