js使用canvas将文字转换成图像数据base64

js使用canvas将文字转换成图像数据base64,做这个功能的原因是因为在工作中遇到想屏蔽浏览器的翻译功能,使用这个方法将文字转成了图片,从而实现屏蔽翻译的功能

源码:

/** 
* js使用canvas将文字转换成图像数据base64
* @param {string}    text              文字内容  "abc"
* @param {string}    fontsize          文字大小  20
* @param {function}  fontcolor         文字颜色  "#000"
* @param {boolean}   imgBase64Data     图像数据
*/
textBecomeImg: function (text,fontsize,fontcolor){
    var canvas = document.createElement('canvas');
    //小于32字加1  小于60字加2  小于80字加4    小于100字加6
    $buHeight = 0;
    if(fontsize <= 32){ $buHeight = 1; }
    else if(fontsize > 32 && fontsize <= 60 ){ $buHeight = 2;}
    else if(fontsize > 60 && fontsize <= 80 ){ $buHeight = 4;}
    else if(fontsize > 80 && fontsize <= 100 ){ $buHeight = 6;}
    else if(fontsize > 100 ){ $buHeight = 10;}
    //对于g j 等有时会有遮挡,这里增加一些高度
    canvas.height=fontsize + $buHeight ;
    var context = canvas.getContext('2d');
    // 擦除(0,0)位置大小为200x200的矩形,擦除的意思是把该区域变为透明
    context.clearRect(0, 0, canvas.width, canvas.height);
    context.fillStyle = fontcolor;
    context.font=fontsize+"px Arial";
    //top(顶部对齐) hanging(悬挂) middle(中间对齐) bottom(底部对齐) alphabetic是默认值
    context.textBaseline = 'middle'; 
    context.fillText(text,0,fontsize/2)

    //如果在这里直接设置宽度和高度会造成内容丢失 , 暂时未找到原因 , 可以用以下方案临时解决
    //canvas.width = context.measureText(text).width;


    //方案一:可以先复制内容  然后设置宽度 最后再黏贴    
    //方案二:创建新的canvas,把旧的canvas内容黏贴过去  
    //方案三: 上边设置完宽度后,再设置一遍文字

    //方案一: 这个经过测试有问题,字体变大后,显示不全,原因是canvas默认的宽度不够,
    //如果一开始就给canvas一个很大的宽度的话,这个是可以的。	
    //var imgData = context.getImageData(0,0,canvas.width,canvas.height);  //这里先复制原来的canvas里的内容	
    //canvas.width = context.measureText(text).width;  //然后设置宽和高	
    //context.putImageData(imgData,0,0); //最后黏贴复制的内容

    //方案三:改变大小后,重新设置一次文字
    canvas.width = context.measureText(text).width;
    context.fillStyle = fontcolor;
    context.font=fontsize+"px Arial";
    context.textBaseline = 'middle'; 
    context.fillText(text,0,fontsize/2)

    var dataUrl = canvas.toDataURL('image/png');//注意这里背景透明的话,需要使用png
    return dataUrl;
}

使用示例:

<img src="" id="show"> 
               
<script type="text/javascript">	  
	var text = "Hello World! ";
	document.getElementById("show").src = jsFun.textBecomeImg(text,50,"#000");
</script>

来源:jsfun.cn
http://www.jsfun.cn/#textBecomeImg


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
base64png换为base64jpg需要经过以下几个步骤: 1. 将base64png换为二进制数据; 2. 将二进制数据换为图像对象; 3. 将图像对象换为canvas对象; 4. 将canvas对象换为base64jpg。 具体的实现可以参考以下代码: ``` // 将base64png换为二进制数据 const base64ToBlob = function(base64) { const bytes = window.atob(base64.split(',')); const array = new Uint8Array(bytes.length); for (let i = 0; i < bytes.length; i++) { array[i] = bytes.charCodeAt(i); } return new Blob([array], {type: 'image/png'}); }; // 将二进制数据换为图像对象 const blobToImage = function(blob) { return new Promise((resolve, reject) => { const img = new Image(); img.onload = function() { resolve(img); }; img.onerror = function() { reject(); }; img.src = URL.createObjectURL(blob); }); }; // 将图像对象换为canvas对象 const imageToCanvas = function(image) { const canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; const context = canvas.getContext('2d'); context.drawImage(image, 0, 0, image.width, image.height); return canvas; }; // 将canvas对象换为base64jpg const canvasToBase64 = function(canvas) { return canvas.toDataURL('image/jpeg', 1); }; // 示例 const base64png = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFElEQVR4AWPw2v7Wfe0f+gYGBgYGBoYBQABJzAU4AAAAASUVORK5CYII='; const blob = base64ToBlob(base64png); blobToImage(blob) .then(imageToCanvas) .then(canvasToBase64) .then(function(base64jpg) { console.log(base64jpg); }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值