您可以通過合併圖像和文字
下面的代碼衡量字體大小和字體臉你提供任何的文字高度使用畫布您創建的卡。然後它將您的文本包裹在您指定的卡片寬度內。
您所設計的卡爲您的用戶之後,可以讓用戶通過顯示卡在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;
這裏是代碼和一個小提琴:http://jsfiddle.net/m1erickson/RtWwF/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var img=new Image();
img.onload=function(){
canvas.width=img.width;
canvas.height=img.height;
ctx.drawImage(img,0,0);
var text="Whenever Cowardly Lion becomes the target of a spell or ability exile Cowardly Lion; or whenever another creature enters the battlefield exile Cowardly Lion. Then you may return it to the battlefield.";
wrapText(ctx,text,19,330,300,"14px Verdana");
text="You're right, I am a coward! I haven't any courage at all. I even scare myself.";
wrapText(ctx,text,19,425,300,"italic 14px Verdana");
}
img.src="http://dl.dropbox.com/u/139992952/stackoverflow/card.png";
function wrapText(context, text, x, y, maxWidth, fontSizeFace) {
var words = text.split(' ');
var line = '';
var lineHeight=measureTextHeight(fontSizeFace);
// +40% = lead
lineHeight=parseInt(lineHeight*1.4);
context.font=fontSizeFace;
for(var n = 0; n < words.length; n++) {
var testLine = line + words[n] + ' ';
var metrics = context.measureText(testLine);
var testWidth = metrics.width;
if(testWidth > maxWidth) {
context.fillText(line, x, y);
line = words[n] + ' ';
y += lineHeight;
}
else {
line = testLine;
}
}
context.fillText(line, x, y);
}
function measureTextHeight(fontSizeFace) {
// create a temp canvas
var width=1000;
var height=60;
var canvas=document.createElement("canvas");
canvas.width=width;
canvas.height=height;
var ctx=canvas.getContext("2d");
// Draw the entire a-z/A-Z alphabet in the canvas
var text="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
ctx.save();
ctx.font=fontSizeFace;
ctx.clearRect(0,0,width,height);
ctx.fillText(text, 0, 40);
ctx.restore();
// Get the pixel data from the canvas
var data = ctx.getImageData(0,0,width,height).data,
first = false,
last = false,
r = height,
c = 0;
// Find the last line with a non-transparent pixel
while(!last && r) {
r--;
for(c = 0; c < width; c++) {
if(data[r * width * 4 + c * 4 + 3]) {
last = r;
break;
}
}
}
// Find the first line with a non-transparent pixel
while(r) {
r--;
for(c = 0; c < width; c++) {
if(data[r * width * 4 + c * 4 + 3]) {
first = r;
break;
}
}
// If we've got it then return the height
if(first != r) return last - first;
}
// error condition if we get here
return 0;
}
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>
太謝謝你了!我將不得不嘗試將所有元素加載到畫布中。我假設它很容易把一個PNG作爲一個元素,我已經用帆布生成背景圖像,所以它可能可能過於結合的。非常感謝,我認爲唯一可怕的問題是reallllyyyyyylongstringsfromannoyingusers。 – Kirk 2013-03-26 02:06:53