Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.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 将div的内容作为图像保存到剪贴板?_Javascript_Css_Canvas_Web_Screenshot - Fatal编程技术网

Javascript 将div的内容作为图像保存到剪贴板?

Javascript 将div的内容作为图像保存到剪贴板?,javascript,css,canvas,web,screenshot,Javascript,Css,Canvas,Web,Screenshot,下面是我想要的一个例子: 我有一个网站,融合了数据元素和图像。实际上,它甚至可以基于其中一些元素对图像应用遮罩效果。结果是一系列非常独特的图形卡,我希望用户能够保存它们的图像。某种出口品 不幸的是,据我所知这是不可能的,但我希望你们中的一个能帮助我。我希望用户能够点击一个按钮来获得他们正在查看的内容的屏幕截图。我有一个包含所有对象的div元素 我曾考虑过尝试用PHP或整个过程使用canvas预渲染图像,但我的主要问题是:确定文本是否溢出框取决于字体,而且需要大量工作。因为我不使用像courier

下面是我想要的一个例子:

我有一个网站,融合了数据元素和图像。实际上,它甚至可以基于其中一些元素对图像应用遮罩效果。结果是一系列非常独特的图形卡,我希望用户能够保存它们的图像。某种出口品

不幸的是,据我所知这是不可能的,但我希望你们中的一个能帮助我。我希望用户能够点击一个按钮来获得他们正在查看的内容的屏幕截图。我有一个包含所有对象的div元素

我曾考虑过尝试用PHP或整个过程使用canvas预渲染图像,但我的主要问题是:确定文本是否溢出框取决于字体,而且需要大量工作。因为我不使用像courier new这样的单字字体,我真的不知道单词在画布上会占据多少空间。似乎也没有一种方法可以测量你放在画布上的文本的高度和宽度。或者,如果有,我只是没有找到文档(或者自上次检查以来,文档已经更新)


我愿意尝试一些不同的事情,甚至可能在我的用户可以安装的插件中创建一个能够为他们这样做的插件。但是理想的解决方案是让javascript有一种方法来实现这一点。

您可以使用画布通过组合图像和文本来创建卡片

下面的代码测量您提供的任何字体大小和字体的文本高度。然后,它会将文本包装在指定的卡片宽度内

为用户设计卡片后,您可以让用户通过在html img标记中将卡片显示为png图像来保存您的卡片…以下是如何:

// html image element where the card will be displayed in PNG format
<p>Right-click the card image below to save it</p>
<img id="card" > 

  // javascript: save canvas image to a dataURL and then
  // put that dataURL into the html image tag so the user can see/save the card
  var dataURL = canvas.toDataURL();
  document.getElementById('card').src = dataURL;
//将以PNG格式显示卡片的html图像元素
右键单击下面的卡图像以保存它

下面是代码和小提琴:


正文{背景色:象牙;}
画布{边框:1px纯红;}
$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var img=新图像();
img.onload=函数(){
canvas.width=img.width;
canvas.height=img.height;
ctx.drawImage(img,0,0);
var text=“每当懦弱的狮子成为咒语或异能的目标时,放逐懦弱的狮子;或每当其他生物进入战场时,放逐懦弱的狮子。然后你可以将其返回战场。”;
wrapText(ctx,文本,19330300,“14px Verdana”);
text=“你说得对,我是个胆小鬼!我一点勇气都没有。我甚至吓到了自己。”;
wrapText(ctx,文本,19425300,“斜体14px Verdana”);
}
img.src=”http://dl.dropbox.com/u/139992952/stackoverflow/card.png";
函数wrapText(上下文、文本、x、y、maxWidth、fontSizeFace){
var words=text.split(“”);
var行=“”;
var lineHeight=测量的高度(fontSizeFace);
//+40%=领先
lineHeight=parseInt(lineHeight*1.4);
context.font=fontSizeFace;
for(var n=0;nmaxWidth){
填充文本(行,x,y);
行=字[n]+'';
y+=线宽;
}
否则{
直线=测试线;
}
}
填充文本(行,x,y);
}
函数度量ExtHeight(fontSizeFace){
//创建临时画布
var宽度=1000;
var高度=60;
var canvas=document.createElement(“canvas”);
画布。宽度=宽度;
画布。高度=高度;
var ctx=canvas.getContext(“2d”);
//在画布中绘制整个a-z/a-z字母表
var text=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz”;
ctx.save();
ctx.font=fontSizeFace;
ctx.clearRect(0,0,宽度,高度);
ctx.fillText(文本,0,40);
ctx.restore();
//从画布获取像素数据
var data=ctx.getImageData(0,0,宽度,高度).data,
第一个=假,
last=false,
r=高度,
c=0;
//查找具有非透明像素的最后一行
while(!last&&r){
r--;
对于(c=0;c
您可以使用画布通过组合图像和文本来创建卡片

下面的代码测量您提供的任何字体大小和字体的文本高度。然后,它会将文本包装在指定的卡片宽度内

为用户设计卡片后,您可以让用户通过在html img标记中将卡片显示为png图像来保存您的卡片…以下是如何:

// html image element where the card will be displayed in PNG format
<p>Right-click the card image below to save it</p>
<img id="card" > 

  // javascript: save canvas image to a dataURL and then
  // put that dataURL into the html image tag so the user can see/save the card
  var dataURL = canvas.toDataURL();
  document.getElementById('card').src = dataURL;
//将以PNG格式显示卡片的html图像元素
右键单击下面的卡图像以保存它

下面是代码和小提琴:


正文{背景色:象牙;}
画布{边框:1px纯红;}
$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var img=新图像();
img.onload=函数(){
canvas.width=img.width;
canvas.height=img.height;