Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将画布显示保存为透明PNG?_Javascript_Html_Canvas - Fatal编程技术网

Javascript 如何将画布显示保存为透明PNG?

Javascript 如何将画布显示保存为透明PNG?,javascript,html,canvas,Javascript,Html,Canvas,如果在中单击RunCodeSnippet,它将显示的一个很酷的用法,您可以在其中“剪切”图像的一部分(只需将鼠标拖动到图像上“剪切”)。我只是好奇,是否有任何方法可以将生成的图像“剪切”部分保存为透明的PNG(即画布中的所有白色都是透明的) 如果有人能给我指出正确的方向(或告诉我这是不可行的),我将不胜感激。是的,有办法。使用canvascontext.getImageData获取图像原始数据数组。根据需要使用它(原始数据)(使所需的任何像素透明),然后使用context.putImageDat

如果在中单击RunCodeSnippet,它将显示
的一个很酷的用法,您可以在其中“剪切”图像的一部分(只需将鼠标拖动到图像上“剪切”)。我只是好奇,是否有任何方法可以将生成的图像“剪切”部分保存为透明的PNG(即画布中的所有白色都是透明的)


如果有人能给我指出正确的方向(或告诉我这是不可行的),我将不胜感激。

是的,有办法。使用canvas
context.getImageData
获取图像原始数据数组。根据需要使用它(原始数据)(使所需的任何像素透明),然后使用
context.putImageData
在画布上渲染数据。然后使用
var data=canvas.toDataURL(“image/png”)
获取图像数据。然后您可以这样做:
image.src=data

使用此链接了解更多信息是的,有一种方法。使用canvas
context.getImageData
获取图像原始数据数组。根据需要使用它(原始数据)(使所需的任何像素透明),然后使用
context.putImageData
在画布上渲染数据。然后使用
var data=canvas.toDataURL(“image/png”)
获取图像数据。然后您可以这样做:
image.src=data

使用此链接了解更多信息。

这里有一个快速教程,演示如何裁剪和保存用户从图像中拖动的剪贴画:

  • 在画布上绘制图像
  • 收听鼠标事件,让用户通过不断将新线连接到当前鼠标位置来定义要剪切的区域
  • 保存数组中#2的每个鼠标点
  • 用户定义完其剪切区域后:

    • 清理画布
    • 使用阵列中保存的点绘制和填充剪切区域
    • 设置
      context.globalCompositeOperation='source-in'
      。此模式将导致任何新图形仅在新绘制的像素和现有像素重叠且所有其他内容都透明的情况下显示。常用术语:新像素将“剪裁”到用户定义的剪切中,并且新像素不会出现在剪切之外
    • 重新绘制图像
  • 结果是图像的第二个图形将仅显示在用户定义的剪切中。其他一切都将是透明的


    最后,您可以使用
    var url=canvascelement.toDataURL
    将裁剪后的画布图像保存到
    .png
    dataURL中。如果您希望从此数据url获得实际图像,您可以
    var img=new image()
    并设置
    img.src=url

    以下是一个快速教程,展示如何裁剪和保存用户从图像中拖动的剪切部分:

  • 在画布上绘制图像
  • 收听鼠标事件,让用户通过不断将新线连接到当前鼠标位置来定义要剪切的区域
  • 保存数组中#2的每个鼠标点
  • 用户定义完其剪切区域后:

    • 清理画布
    • 使用阵列中保存的点绘制和填充剪切区域
    • 设置
      context.globalCompositeOperation='source-in'
      。此模式将导致任何新图形仅在新绘制的像素和现有像素重叠且所有其他内容都透明的情况下显示。常用术语:新像素将“剪裁”到用户定义的剪切中,并且新像素不会出现在剪切之外
    • 重新绘制图像
  • 结果是图像的第二个图形将仅显示在用户定义的剪切中。其他一切都将是透明的

    最后,您可以使用
    var url=canvascelement.toDataURL
    将裁剪后的画布图像保存到
    .png
    dataURL中。如果您希望从此数据url获得实际图像,则可以
    var img=new image()
    并设置
    img.src=url