我在html畫布中繪製圖像。是否有辦法從JS中的圖像手動創建base64code
這是怎麼計算的像素
for (var i = 0; i < data.length; i += 4) {
var red = data[i]; // red
var green= data[i + 1]; // green
var blue = data[i + 2] ; // blue
}
,這是怎麼出來的
var dataURL = canvas.toDataURL('image/png');
創建的base64編碼但這對於的RGBA PNG圖像創建的base64編碼。我如何才能從第一個頻道data[i]
創建base64代碼,有沒有辦法將其手動編碼爲base64或者提供toDataURL選項來實現?我試圖尋找了文檔,但我找不到任何
感謝
編輯
編輯與坊間建議:
var imageData = ctx.getImageData(0,0,cw, ch);
var data= imageData.data
for (var i = 0; i < data.length; i += 4) {
var grayscale = data[i]*0.2126 + data[i +1]*0.7152 + data[i +2]*0.0722;
data[i] = grayscale; // red
data[i + 1] = grayscale; // green
data[i + 2] = grayscale; // blue
}
var binary = new Uint8Array(data.length);
for (var i=0; i<data.length; i++){
binary[i]=data[i];
}
var s=binary.toString();
var base = btoa(s);
您可以設置數據說,轉換爲B + W,但畫布輸出選項都將是RGB(有時)。你可以使用'(「image/jpeg」,0.5)'來獲得RGB,相對緊湊 – dandavis
有沒有其他的方法可以做到這一點?我問的原因是,因爲我有一個灰度圖像以便傳遞圖像,所以我不需要其他通道。 – Tom
你可以(1)將剩餘的灰度值保存到'Uint8Array'中,(2)用'var s = myUint8Array.toString()'將該數組字符串化,(3)Base64用'btoa(s)'對該字符串進行編碼。我的問題是你打算如何使用這個結果? – markE