0

好的,在我的上一个问题中,我发现我正在使用的浏览器由于某种原因不支持 toDataURL()。我尝试使用诸如todataur-png-js 之类的解决方法,但无济于事,因为它也失败了。我遇到了一种可能性,即我可以让 PHP 根据画布中的像素数据构建图像并将其保存为图像。但是,我对画布没有太多经验,也不知道如何做这样的事情。有任何想法吗?朝正确的方向轻推也足够了。=)

4

2 回答 2

2

如果您已经有一个像素数组,您可以使用 GD 库的imagecreatetruecolor()imagesetpixel()函数来完成此操作:

// Assume $pixelArray is a 2-dimensional array of colors for the pixels

// Grab the dimensions of the pixel array
$width = count($pixelArray, 0);
$height = count($pixelArray);

// Create the image resource
$img = imagecreatetruecolor($width, $height);

// Set each pixel to its corresponding color stored in $pixelArray
for ($y = 0; $y < $height; ++$y) {
    for ($x = 0; $x < $width; ++$x) {
        imagesetpixel($img, $x, $y, $pixelArray[$y][$x]);
    }
}

// Dump the image to the browser
header('Content-Type: image/png');
imagepng($img);

// Clean up after ourselves
imagedestroy($img);

如果要将图像保存到磁盘而不是将其转储到浏览器,只需省略对的调用header()并将路径imagepng()作为第二个参数传递:

imagepng($img, '/some/path/to/your/desired/image.png');
于 2012-04-23T17:19:57.977 回答
1

目前尚不清楚您是否能够在 Netfront 浏览器中获取画布的像素数据。

在您的示例页面中,更改按钮处理程序代码:

var cv=document.getElementsByTagName('canvas')[0];document.documentElement.style.background='url('+cv.toDataURL()+')';

对此:

var cv=document.getElementsByTagName('canvas')[0];alert(cv.toDataURL());

它是否显示alert()弹出的任何像素数据?

如果是这样,那么您似乎无法在此浏览器的背景图像中使用数据 URL。如果没有,那么看起来您的画布getImageData()在引擎盖下不支持。

于 2012-04-23T17:24:54.987 回答