【发布时间】:2015-08-26 03:09:45
【问题描述】:
我是 Canvas 的新手,我有一个任务,我有一个输入框来输入文本。然后我上传一张图片。当图片显示时,它应该在背景中重复文本。
到目前为止,我已经能够上传图像并对其进行轻微的灰度化,但我不知道如何使用文本在背景中重复
如果有人能指出下一步该做什么,那就太好了。-谢谢
到目前为止我的代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
document.addEventListener('DOMContentLoaded', function(){
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var source = document.getElementById('fileupload');
source.addEventListener('change',handleImage,false);
function handleImage(e){
var reader = new FileReader();
reader.onload = function(event){
var img = new Image();
img.onload = function(){
context.drawImage(img,0,0);
grayScale(context, canvas);
}
img.src = event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
}
function grayScale(context, canvas) {
var imgData = context.getImageData(0, 0, canvas.width, canvas.height);
var pixels = imgData.data;
for (var i = 0, n = pixels.length; i < n; i += 4) {
pixels[i]+=20;
var grayscale = (pixels[i*4] + pixels[i*4+1] + pixels[i*4+2]) /3;
pixels[i*4 ] = grayscale; // red
pixels[i*4+1] = grayscale+30; // green
pixels[i*4+2] = grayscale; // blue
// pixels[i+3] = 0.5; // is alpha
}
//redraw the image in black & white
context.putImageData(imgData, 0, 0);
}
})
</script>
<input type="text" id="textcontent">
<input type="range" id="slider">
Background<input type="checkbox" id="background">
Select file: <input id="fileupload" type="file" multiple>
<canvas id='canvas' width="800" height ="800"></canvas>
</body>
</html>
【问题讨论】:
-
您的屏幕截图中的文字似乎在背景中重复?背景是否需要某种颜色(例如白色)。创建图像后,可以在画布上重复文本,但困难的部分将决定背景与图像是什么。但取决于你如何定义,这不是什么大问题。
-
如果选中背景颜色复选框,则背景为黑色,否则为白色。我想知道创建图像后如何在背景中重复文本。
-
网上有很多这样的图像 --> ascii 生成器,其中许多都有所使用方法的描述。我已经好几年没有读到它们了。从记忆中,有几种方法似乎最常见 - 它们中的每一种都要求您可以检查用于最终图像的任何/所有字符的位图。一些简单地确定黑白像素的比率并使用它来计算字符的“亮度”,而另一些还考虑 哪里 找到像素,以提供形状匹配。考虑
-:_,[:],<:>
标签: javascript html canvas html5-canvas