javascript - 如何从 Canvas 图像获取base64?

标签 javascript canvas base64

查了很多资料,没有找到合适的。

这是我的代码:

context.drawImage(img, 0, -realDif, width, width*def);
var base64 = canvas.toDataURL("image/jpeg");

toDataUrl 返回给我的字符串不是基数 64,正如一些人告诉我的那样,我真的找不到转换它的方法。有人知道吗?

这就是我得到的,因为你可以检查在线解码器,它不起作用

string(2415) "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCADhALQDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8qqACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP/Z" 

这是完整的代码

var canvas = document.getElementById('myCanvas');
    var context = canvas.getContext('2d');
    var URL = window.URL || window.webkitURL,
    imageUrl,
    img;

    if (URL) {
      imageUrl = URL.createObjectURL(file);
      img = document.createElement("img");
      img.src = imageUrl;
      img.onload = function() {
          URL.revokeObjectURL(imageUrl);          
          var def = (img.height / img.width);
          if(def < 1.25){
              dif = (heigh/def) - width;
              realDif = dif/2;
              context.drawImage(img, -realDif, 0, heigh/def, heigh);
          } else {
              dif = (width*def) - heigh;
              realDif = dif/2;
              context.drawImage(img, 0, -realDif, width, width*def);
          }
      } 
    }
    var inpHidden = document.getElementById("img64");
    inpHidden.value = canvas.toDataURL("image/jpeg");   
    document.getElementById("avatarForm").submit();

如果我最终不发送表单,我可以看到 Canvas 在上一页中正确绘制...可能出了什么问题

最佳答案

好吧,我只是将 canvas.toDataURL("image/jpeg"); 放入 onlad 函数中,现在它正在工作

if (URL) {
      imageUrl = URL.createObjectURL(file);
      img.src = imageUrl;
      img.onload = function() {
          //URL.revokeObjectURL(imageUrl);        
          var def = (img.height / img.width);
          if(def < 1.25){
              dif = (heigh/def) - width;
              realDif = dif/2;
              context.drawImage(img, -realDif, 0, heigh/def, heigh);
          } else {
              dif = (width*def) - heigh;
              realDif = dif/2;
              context.drawImage(img, 0, -realDif, width, width*def);
          }
          var inpHidden = document.getElementById("img64");
          inpHidden.value = canvas.toDataURL("image/jpeg");
          document.getElementById("avatarForm").submit();
      }      

希望有一天这对某人有帮助,特别感谢你们@Kaiido

关于javascript - 如何从 Canvas 图像获取base64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40618419/

相关文章:

javascript - 为什么我的 Canvas 过滤器即使在渲染为 Canvas 后也不起作用?

HTML5 Canvas - origin-clean 标志如何设置为 false?

java - Java 7 中的 Base64 字符串解码问题

java - jQuery 函数没有调用 Spring MVC 中的 onchange 事件

javascript - 如何在反向代理模式下对 Fiddler 进行编程以限制 IP 范围?

javascript - Circle to Circle 碰撞响应未按预期工作

file - 在Python中将base64字符串写入文件无法正常工作

java - 通过表单提交从jsp中检索src数据

javascript - 由于 1000 个 "on"事件,Firebase 后端 UI 在 cron 作业期间卡住

javascript - 如何让 javascript 在 SQL while 循环中回显所有数据?