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