JavaScript生成dataURL格式的透明1x1像素

我想知道如何在JavaScript中生成单个像素,并将其转换为base64。理想的函数应该是:

function createPixel(hexColor, opacity){
   //...Calculate
   return base64DataURL;
}

我对图像处理不是很熟悉。任何格式都可以(png、gif等)。我想用它来覆盖背景图像(是的,我可以使用RGBA CSS3,但我试图将其与背景图像一起放置在一个元素上,这样我就不会将一个元素叠加到另一个元素上以达到效果)。

提前感谢。

编辑:我不想使用Canvas,我相信您可以使用Canvas来获取Base64 dataURL,但我确信它没有字符串操作那么快。此外,我不担心将映像转换为base64,而更感兴趣的是创建映像。


解决方案

这里有一个使用<canvas>(demo @ jsfiddle)的完全跨浏览器兼容的实现。

var canvas = document.createElement('canvas');

// http://code.google.com/p/explorercanvas/wiki/Instructions#Dynamically_created_elements
if (!canvas.getContext) G_vmlCanvasManager.initElement(canvas);

var ctx = canvas.getContext('2d');
canvas.width = 1;
canvas.height = 1;

// for simplicity, assume the input is in rgba format
function createPixel(r, g, b, a) {
    ctx.fillStyle = 'rgba(' + [r,g,b,a].join() + ')';
    ctx.fillRect(0,0,1,1);
    // 'data:image/png;base64,'.length => 22
    return canvas.toDataURL('image/png','').substring(22);
}

我很想看看它在性能方面与icktoofay's answer有什么不同。请注意,这将不得不对IE<;9使用excanvas,这意味着那里的性能几乎肯定会更差(但新特性)。

查看jsperf:http://jsperf.com/base64image

相关文章