相关疑难解决方法(0)

是否应立即将图像src设置为数据URL?

考虑以下(脆弱的)JavaScript代码:

var img = new Image;
img.src = "data:image/png;base64,..."; // Assume valid data

// Danger(?) Attempting to use image immediately after setting src
console.log( img.width, img.height );
someCanvasContext.drawImage( img, 0, 0 );

// Danger(?) Setting onload after setting src
img.onload = function(){ console.log('I ran!'); };
Run Code Online (Sandbox Code Playgroud)

问题

  • 图像宽度和高度应该立即正确吗?
  • 画布应该立即开始工作吗?
  • 是否应该onload调用回调(在src更改后设置)?

实验测试
我创建了一个具有类似代码的简单测试页面.在Safari我的第一次测试,都是由本地打开HTML网页(file:///URL),并从我的服务器加载它,结果显示一切工作:高度和宽度是正确的,在画布上绘制的作品,并且onload还火.

在Firefox v3.6(OS X)中,启动浏览器后加载页面显示设置后高度/宽度不正确,drawImage()失败.(然而,onload处理程序会触发.)然而,再次加载页面会在设置和drawImage()工作后立即显示宽度/高度.Firefox似乎将数据URL的内容缓存为图像,并在同一会话中使用时立即可用.

在Chrome v8(OS X)中,我看到与Firefox相同的结果:图像不能立即使用,但需要一些时间从数据URL异步"加载".

除了实验证明上述哪些浏览器有效或无效之外,我真的很喜欢这些应该如何表现的规范的链接.到目前为止,我的Google-fu还没有完成任务.

安全玩耍
对于那些不明白为什么上面可能有危险的人,要知道你应该使用这样的图像是安全的:

// First create/find the …
Run Code Online (Sandbox Code Playgroud)

html javascript image data-uri

71
推荐指数
2
解决办法
4万
查看次数

画布受到跨源数据的污染

我正在加载来自第三方网站的动作jpeg,我可以信任.我正在尝试,getImageData()但浏览器(Chrome 23.0)抱怨说:

Unable to get image data from canvas because the canvas has been tainted by
cross-origin data.
Run Code Online (Sandbox Code Playgroud)

SO上有一些类似的问题,但他们使用的是本地文件,而我正在使用第三方媒体.我的脚本在共享服务器上运行,我没有远程服务器.

我试过img.crossOrigin = 'Anonymous'img.crossOrigin = ''(参见关于CORS的Chromium博客上的这篇文章),但它没有帮助.关于我如何getImageData在具有跨源数据的画布上的任何想法?谢谢!

javascript canvas cross-domain mjpeg cors

16
推荐指数
3
解决办法
4万
查看次数

将数据URI转换为图像数据

/**
 * Converts data URI in 'image/png' format to an image data object
 * @param dataURL Base64 encoded string
 * @returns {ImageData/undefined}
 */
convertDataURLToImageData: function (dataURL) {
    if (dataURL !== undefined && dataURL !== null) {
        var canvas, context, image, imageData;
        canvas = document.createElement('canvas');
        canvas.width = 470;
        canvas.height = 470;
        context = canvas.getContext('2d');
        image = new Image();

        image.addEventListener('load', function(){
            context.drawImage(image, 0, 0, canvas.width, canvas.height);
            imageData = context.getImageData(0, 0, canvas.width, canvas.height);
            //how do i return this?
        }, false);
        image.src = dataURL; …
Run Code Online (Sandbox Code Playgroud)

javascript html5 canvas

12
推荐指数
2
解决办法
4万
查看次数

如何裁剪canvas.toDataURL

您好,
我想canvas.toDataURL()在将其发送到服务器之前裁剪我,但我没有找到如何:(
这是我的代码:

TakePhoto: function() {
        var myCanvas = document.getElementById('game');
        var dataURL = myCanvas.toDataURL();
        // crop the dataURL
    }
Run Code Online (Sandbox Code Playgroud)

那么,如何裁剪dataURL
谁能帮我 ?
提前致谢

javascript canvas

2
推荐指数
1
解决办法
3768
查看次数

从javascript中的<div> CSS样式获取图像数据

我有一个CSS样式,在它的背景中它有一个图像,例如它就像这个代码

.test {
    background-image: url("paper.gif");
    background-color: #cccccc;
}
Run Code Online (Sandbox Code Playgroud)

我也有一个javascript代码,用于获取图像的平均颜色,

function getAverageRGB(imgEl) {

    var blockSize = 5, // only visit every 5 pixels
        defaultRGB = {r:0,g:0,b:0}, // for non-supporting envs
        canvas = document.createElement('canvas'),
        context = canvas.getContext && canvas.getContext('2d'),
        data, width, height,
        i = -4,
        length,
        rgb = {r:0,g:0,b:0},
        count = 0;

    if (!context) {
        return defaultRGB;
    }

    height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;
    width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;

    context.drawImage(imgEl, 0, 0);

    try {
        data …
Run Code Online (Sandbox Code Playgroud)

html javascript css

2
推荐指数
1
解决办法
520
查看次数

标签 统计

javascript ×5

canvas ×3

html ×2

cors ×1

cross-domain ×1

css ×1

data-uri ×1

html5 ×1

image ×1

mjpeg ×1