工作积累(一)——使用canvas实现前台图片base64转
admin
2023-01-30 04:24:47
0

利用 HTML5 标签和 canvasapi ,我们可以得到图片的 base64 码,可以在前台完成图片向 base64 的转码而不用借助后台,下面看一下实现方法。

1.HTML 代码片段:

HTML 代码非常简单,只需要用到 HTML5 标签即可,指定其 id 方便我们找到该元素:

但是需要注意的一点是,需要转换为 base64 码的图片都需要事先包含在 标签中,同时这么做可以为我们提供图片的真实宽度和高度值。为了不影响显示,可以选择将其设置为隐藏:

 

2.JavaScript 代码片段:

JavaScript 代码中我们用到 canvas api 中的三个方法:getContext(“2d”) drawImage(tmpImage, 0, 0) toDataURL(“p_w_picpath/png”),我们不去深究这些方法,只要知道“2d” 指定图片维度, tmpImage Image 对象,0, 0 分别为生成后的图片距左及距上的像素数即可。来看具体代码:

$(window).load(function(){
  var loadCanvas = document.getElementById("load-area"),
  context = loadCanvas.getContext("2d"),
  tmpImage = new Image(),
  base64Str = "";
  loadCanvas.width = $('#convert-img').width();
  loadCanvas.width = $('#convert-img').height();
  tmpImage.src = "img/demo.png";
  context.drawImage(tmpImage, 0, 0);
  base64Str = loadCanvas.toDataURL("p_w_picpath/png");
};

至此,变量 base64Str即为图片转换成的 base64 码。可以通过 ajax 向直接 POST 给后台,通过 base64 解码保存,完成图片上传。

补充:

JavaScript 代码中我们用到了 jQuery 中的

$(window).load(function(){});

方法,该方法作用几乎等同于 JavaScript 中的

window.onload =function() {};

只是前者在同一个页面中可以使用多次,而后者在同一个页面中只能使用一次。这里不使用

$(document).ready(function(){}); //$(function () {});

是因为该方法的时间节点是 DOM 加载完毕,而图片、音乐等大型文件可能仍为加载完。如果想要使用,需要将 JavaScript 做如下改造:

$(function() {
  var tmpImage = new Image();
  tmpImage.src = "img/demo.png";
  tmpImage.onload = function() {
    var loadCanvas = $('#load-area').get(0),
    context = loadCanvas.getContext("2d"),
    base64Str = "";
    loadCanvas.height = $('#convert-img').height();
    loadCanvas.width = $('#convert-img').width();
    context.drawImage(tmpImage, 0, 0);
    base64Str = loadCanvas.toDataURL("p_w_picpath/png");
  };
});

 

注:附件为该 demo 的源代码,可供参考(原为 .html 文件,由于不允许上传而转换为 .txt 文件,可以在下载后自行修改文件后缀名)。


附件:http://down.51cto.com/data/2365621

相关内容

热门资讯

重磅消息“鱼虾蟹控制器究竟有挂... 您好:鱼虾蟹控制器这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款...
今日重大消息“闲来贵州麻将是不... 家人们!今天小编来为大家解答闲来贵州麻将透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里...
【今日要闻】“陕西欢喜开挂神器... 您好:陕西欢喜这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
终于了解“天天爱泰州麻将怎么装... 您好:天天爱泰州麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这...
最新引进“毛豆大厅牛牛辅助器?... 最新引进“毛豆大厅牛牛辅助器?”(详细开挂教程)您好,毛豆大厅牛牛这个游戏其实有挂的,确实是有挂的,...
【第一资讯】“王子棋牌怎么开挂... 【第一资讯】“王子棋牌怎么开挂?”(详细开挂教程)您好,王子棋牌这个游戏其实有挂的,确实是有挂的,需...
最新引进“授权大厅炸/金/花怎... 有 亲,根据资深记者爆料授权大厅炸/金/花是可以开挂的,确实有挂(咨询软...
重磅消息“老友内蒙古麻将怎么开... 重磅消息“老友内蒙古麻将怎么开挂?”(确实真的有挂)您好,老友内蒙古麻将这个游戏其实有挂的,确实是有...
终于懂了“新天天游戏有没有挂?... 家人们!今天小编来为大家解答新天天游戏透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里买...
玩家分享攻略“三鑫联盟到底有挂... 玩家分享攻略“三鑫联盟到底有挂吗?”(透视曝光猫腻)您好,三鑫联盟这个游戏其实有挂的,确实是有挂的,...