动态生成的图标

Sha*_*haz 42 html javascript favicon html5-canvas

是否可以使用JavaScript和HTML动态生成图标,使用当前页面的图标作为背景,以及前景中的随机数?

例如,假设当前的favicon看起来与此类似:

======================
====XXXXXXXXXXXXXX====
====X=================
====X=================
====X=====XXXXXXXX====
====X============X====
====X============X====
====XXXXXXXXXXXXXX====
======================
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我怎样才能使用JavaScript和HTML让它看起来与此类似:

======================
====XXXXXXXXXXXXXX====
====X=================
====X=================
====X=====XXXXXXXX====
====X=========--111--=
====X=========--1-1--=
====XXXXXXXXXX----1--=
==============--1111-=
Run Code Online (Sandbox Code Playgroud)

地图::
=白色背景
x:原始Favicon图像
-:红色生成的图像,带有数字
1:白色文本

思路:

  • 帆布?
  • 数据Uri?

Joe*_*Joe 54

编辑:得到它的工作

var canvas = document.createElement('canvas');
    canvas.width = 16;canvas.height = 16;
    var ctx = canvas.getContext('2d');
    var img = new Image();
    img.src = '/favicon.ico';
    img.onload = function() {
        ctx.drawImage(img, 0, 0);
        ctx.fillStyle = "#F00";
        ctx.fillRect(10, 7, 6, 8);
        ctx.fillStyle = '#FFFFFF';
        ctx.font = 'bold 10px sans-serif';
        ctx.fillText('2', 10, 14);

        var link = document.createElement('link');
        link.type = 'image/x-icon';
        link.rel = 'shortcut icon';
        link.href = canvas.toDataURL("image/x-icon");
        document.getElementsByTagName('head')[0].appendChild(link);
    }
Run Code Online (Sandbox Code Playgroud)

你可以实际运行chrome并粘贴它:

javascript: var canvas = document.createElement('canvas');canvas.width = 16;canvas.height = 16;var ctx = canvas.getContext('2d');var img = new Image();img.src = '/favicon.ico';img.onload = function() {ctx.drawImage(img, 0, 0);ctx.fillStyle = "#F00";ctx.fillRect(10, 7, 6, 8);ctx.fillStyle = '#FFFFFF';ctx.font = 'bold 10px sans-serif';ctx.fillText('2', 10, 14);var link = document.createElement('link');link.type = 'image/x-icon';link.rel = 'shortcut icon';link.href = canvas.toDataURL("image/x-icon");document.getElementsByTagName('head')[0].appendChild(link);}
Run Code Online (Sandbox Code Playgroud)

进入浏览器并查看它的实际效果.

在此输入图像描述

  • 一些警告:正如[此处](http://stackoverflow.com/questions/260857/changing-website-favicon-dynamically)所述,这不适用于所有浏览器.如果从页面所在的其他域加载favicon,这也将失败 - 请参阅[此问题](http://stackoverflow.com/questions/2390232/why-does-canvas-todataurl-throw-a-security-例外) (3认同)
  • 我得到`SecurityError:无法在'HTMLCanvasElement'上执行'toDataURL':可能无法导出受污染的画布. (2认同)

mel*_*okb 15

您可以查看这个问题,该问题讨论了如何动态更改favicon.此外,还有一个网站声称只使用JavaScript,画布和数据URI在favicon中玩游戏,这应该适用于IE以外的所有现代浏览器.不确定这是否符合您的要求,但您可以尝试逆向工程如何工作.

这是一个SO答案,解释了如何使用canvas元素读取favicon数据并获取图像数据,然后可以将其修改并组合成一个新图标.