关键词:
语言:javascript
API及元素:canvas,file API
读取图片像素值,变化为灰度,根据画面设定,替换为文字显示
---
效果图【福字】:
猜猜下面是什么:
【金鸡】
原图:
继续猜猜:
源码非常简单:
1 <html> 2 <head> 3 <title>pic2Str</title> 4 <script src="http://apps.bdimg.com/libs/jquery/1.6.4/jquery.js"></script> 5 <style> 6 .floatLeft{float:left;} 7 .clear{clear:both;} 8 input[type=number]{width:50px;} 9 </style> 10 </head> 11 <body> 12 <div> 13 <p><input type="file" id='fileInput' accept="image/*" /></p> 14 <p> 15 灰度范围 [深色] :<input type="number" min="0" max="255" value='0' id='rgb1f' /> 16 - 17 <input type="number" maxlength="3" value='120' id='rgb1t' /> 18 : 19 替换文字:<input type="text" size="1" maxlength="1" value='9' id='rgb1s' /> 20 </p> 21 <p> 22 灰度范围[普通色]:<input type="number" min="0" max="255" value='120' id='rgb2f' /> 23 - 24 <input type="number" maxlength="3" value='200' id='rgb2t' /> 25 : 26 替换文字:<input type="text" size="1" maxlength="1" value='0' id='rgb2s' /> 27 </p> 28 <p> 29 灰度范围 [浅色] :<input type="number" min="0" max="255" value='200' id='rgb3f' /> 30 - 31 <input type="number" maxlength="3" value='255' id='rgb3t' /> 32 : 33 替换文字:<input type="text" size="1" maxlength="1" value='1' id='rgb3s' /> 34 </p> 35 <p> 36 一文字横向跨度<input type="number" min="0" max="100" value='2' id='wpx' /> 37 - 38 一文字纵向跨度<input type="number" min="0" max="100" value='2' id='hpx' /> 39 </p> 40 </div> 41 <div><input type="button" value="pic2Str" onclick="pic2Str()" /></div> 42 <div><img style="display:none" id='img' /></div> 43 <div><canvas style="display:none" id='canvas' ></canvas></div> 44 <div id='pic2Str'></div> 45 46 47 <script> 48 var hasFile = false; 49 $(function(){ 50 // bind file change event to load the image file 51 var fileInput = document.getElementById("fileInput"); 52 fileInput.addEventListener('change', function(event) { 53 var file = fileInput.files[0]; 54 var imageType = /^image\//; 55 if ( !imageType.test(file.type) ) { 56 alert('file type error: ' + file.type +'(image excepted)'); 57 return; 58 } 59 var img = document.getElementById("img"); 60 img.file = file; 61 // 读取File对象中的内容 62 var reader = new FileReader(); 63 reader.onload = (function(aImg) { 64 return function(e) { 65 aImg.src = e.target.result; 66 $("#canvas").css({width:aImg.width+'px',height:aImg.height+'px'}); 67 $("#canvas").attr('width',aImg.width); 68 $("#canvas").attr('height',aImg.height); 69 var c=document.getElementById("canvas"); 70 var ctx=c.getContext("2d"); 71 ctx.drawImage(aImg,0,0); 72 hasFile = true; 73 }; 74 })(img); 75 reader.readAsDataURL(file); 76 }, false); 77 }); 78 function pic2Str(){ 79 var wpx = $("#wpx").val(); 80 var hpx = $("#hpx").val(); 81 var rgb1f = $("#rgb1f").val(); 82 var rgb1t = $("#rgb1t").val(); 83 var rgb1s = $("#rgb1s").val(); 84 var rgb2f = $("#rgb2f").val(); 85 var rgb2t = $("#rgb2t").val(); 86 var rgb2s = $("#rgb2s").val(); 87 var rgb3f = $("#rgb3f").val(); 88 var rgb3t = $("#rgb3t").val(); 89 var rgb3s = $("#rgb3s").val(); 90 if(!hasFile) 91 return; 92 if(wpx=='' || hpx=='') 93 return; 94 var c=document.getElementById("canvas"); 95 var ctx=c.getContext("2d"); 96 var imgData=ctx.getImageData(0,0,c.width,c.height); 97 var wi = Math.floor( imgData.width / wpx); 98 var hi = Math.floor( imgData.height / hpx); 99 var strRst = []; 100 for(var i = 0;i<hi;i++){ 101 var strRow = ""; 102 for(var j = 0;j<wi;j++){ 103 var rgbAvg = 0; 104 for(var h=0;h<hpx;h++){ 105 for(var l=0;l<wpx;l++){ 106 var min = Math.min(imgData.data[(i*hpx+h)*4*imgData.width+(j*wpx*4+l)] 107 , imgData.data[(i*hpx+h)*4*imgData.width+(j*wpx*4+l)+1] 108 , imgData.data[(i*hpx+h)*4*imgData.width+(j*wpx*4+l)+2]); 109 var max = Math.max(imgData.data[(i*hpx+h)*4*imgData.width+(j*wpx*4+l)] 110 , imgData.data[(i*hpx+h)*4*imgData.width+(j*wpx*4+l)+1] 111 , imgData.data[(i*hpx+h)*4*imgData.width+(j*wpx*4+l)+2]); 112 rgbAvg += (min+max)*0.5; 113 } 114 } 115 rgbAvg = rgbAvg / (hpx*wpx); 116 if(rgbAvg>=rgb1f && rgbAvg<rgb1t){ 117 strRow += ''+ rgb1s; 118 }else if(rgbAvg>=rgb2f && rgbAvg<rgb2t){ 119 strRow += ''+rgb2s; 120 }else if(rgbAvg>=rgb3f && rgbAvg<=rgb3t){ 121 strRow += ''+rgb3s; 122 }else{ 123 strRow += " "; 124 } 125 } 126 strRst.push(strRow); 127 } 128 strRstHtml = ""; 129 for(var x = 0;x<strRst.length;x++) 130 strRstHtml += strRst[x] + '<br/>' 131 $("#pic2Str").html(strRstHtml); 132 } 133 </script> 134 </body> 135 </html>
canvas转图片中的文字自动换行(代码片段)
概述最近项目用到了canvas转图片,但是由于canvas对文字排版的支持非常弱,一般我们在canvas上画不同排版的文字(比如竖排文字)都是利用js计算横纵坐标,然后一个字一个字地画出来,今天无意中看到一个使用svg的方法,记录... 查看详情
vue图片上绘制文字(js图片上动态生成文字)
newTestImage(text) varcanvas=document.createElement("canvas") varcxt=canvas.getContext("2d") varimg=newImage() img.src 查看详情
vue图片上绘制文字(js图片上动态生成文字)
newTestImage(text) varcanvas=document.createElement("canvas") varcxt=canvas.getContext("2d") varimg=newImage() img.src 查看详情
vue图片上绘制文字(js图片上动态生成文字)
newTestImage(text) varcanvas=document.createElement("canvas") varcxt=canvas.getContext("2d") varimg=newImage() img.src 查看详情
vue+canvas图片加水印(代码片段)
思路:将两张图片绘制为一张目标:输入的文字,绘制到图片上,简单实现图片水印效果:输入的文字1:‘你猜猜’+图片2=图片3(不要看清除水印的按钮,本人垃圾没实现) 选择图片html <inputtype="file"id="... 查看详情
怎么把一个text文本转换成canvas对象
...到想屏蔽浏览器的翻译功能,使用这个方法将文字转成了图片,从而实现屏蔽翻译的功能源码:/*** js使用canvas将文字转换成图像数据base64* @param string text 文字内容 "abc"* @param string fontsize ... 查看详情
html页面转成图片,并提供下载
(2)下载素材html2canvas.min.js下载地址:canvas2image.js下载地址:base64.js下载地址:(3)引入js <script src="你的路径/html2canvas.min.js"></script> <script s 查看详情
图片在canvas中显示,给canvas添加文字,文字描边,将canvas保存成图片下载到本地
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"content="width=device-widt 查看详情
vue实现转图片打印
参考技术A首先安装两个插件npminstall--savehtml2canvasnpminstallprint-js--save1,设置打印区域ref2,引入插件转图片打印需要先安装html2Canvas和print-js3,js4,单纯的打印,与html2canvas不同的是,这里的printCons要设置为id而不是ref 查看详情
python实现文字转图片(代码片段)
文章目录一、需求二、实现文字转单个图片代码三、实现文字转配对图片代码一、需求目前想要将输入的文字,转为指定风格的图片,比如宋体、草体二、实现文字转单个图片代码importosimportpdbimportPILimportnumpyasnpfromPILimpor... 查看详情
文字图片化
...现类似现在网上流行的长微博生成器,就是把长文字转成图片。当然功能比不上网上流传的,不知道网上那些用的什么方法。我这是用的HTML5的Canvas特性,也算一种实现吧。 示例地址: TextToImage,仅作大家交流... 查看详情
为图片添加文字canvas
<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>无标题文档</title></head><body><canvasid=‘myCanvas‘>& 查看详情
canvas图片、文字模糊问题
...末尾遗留问题部分有详细解释说明。之前做了一个在线给图片添加文本框的工具,大体思路是先把图片加载到一个DOM结构中,然后通过html2canvas导出到一个canvas,最后通过canvas自带的toDataURL方法导出成图片。这个思路并不复杂,... 查看详情
安卓自定义view进阶-canvas之图片文字
Canvas之图片文字作者微博:@GcsSloop【本系列相关文章】在上一篇文章Canvas之画布操作中我们了解了画布的一些基本操作方法,本次了解一些绘制图片文字相关的内容。如果你对前几篇文章讲述的内容熟练掌握的话,那么... 查看详情
canvas文字自动换行圆角矩形画法生成图片手机长按保存(代码片段)
canvas的文字自动换行函数封装//str:要绘制的字符串//canvas:canvas对象//initX:绘制字符串起始x坐标//initY:绘制字符串起始y坐标//lineHeight:字行高,自己定义个值即可functioncanvasTextAutoLine(str,canvas,initX,initY,lineHeight)varctx=canvas.getContext("2d") 查看详情
canvas中的那些坑
年前做了一个合成图片的小工具,需求大体为:用户输入要在一整张大图片显示的文字、图片及它们所在大图的坐标,合成一张大图用来干啥干啥。做法当然是用canvas做的。canvas就不细说了,来说说他的坑吧。坑之一:输入的文... 查看详情
利用html5fileapi读取图片进行本地操作
...片的md5值可以确保唯一性。针对这个需求,可以使用HTML5fileapi来读取文件。实现方法如下:document.getElementById("file").addEventListener("ch 查看详情
canvas将图片转成base64格式以及验证图片是否透明(代码片段)
...mg=newImage();img.src=e.target.result;self.isAlphaBackground=false;//缩放图片需要的canvasvarcanvas=document.createElement(‘canvas‘);varcontext=canvas.getContext(‘2d‘);//base64地址图片加载完毕后img.onload=function()//图片原始尺寸varoriginWidth=this.width;varoriginHeight=... 查看详情