javascript - 从 Canvas 元素制作图像

标签 javascript html image canvas

我知道这个问题之前已经被问过,但我认为我的问题有点不同......

我正在尝试从多个图像创建一个 Canvas ,其中一个是 Facebook 用户个人资料图片(我保存它是为了解决跨域问题),但仍然得到一个空白 png?

这是代码

    <canvas id="canvas" width="500px" height="500px"></canvas>
    <img id="canvasImg" src=""/>
    <?php

    $username = $user_profile['username'];
    $image = file_get_contents("https://graph.facebook.com/$username/picture?type=large"); // sets $image to the contents of the url
   file_put_contents("_assets/img/users/$username.gif", $image); // places the contents in the file /path/image.gif

   ?>
   <script>
   function drawCanvas() {  
       var canvas = document.getElementById('canvas');
       var context = canvas.getContext('2d');

       var imageObj2 = new Image();
       imageObj2.src = "_assets/img/users/<?php echo $username; ?>.gif";

       imageObj2.onload = function() {
           context.drawImage(imageObj2, 0, 0);
           context.font = "20pt Calibri";
           context.fillStyle = 'ffffff';
           context.fillText("My TEXT 2!", 70, 120);
       };

       var imageObj1 = new Image();
       imageObj1.src = "_assets/img/bg_main.jpg";
       imageObj1.onload = function() {
           context.drawImage(imageObj1, 150, 150);
           context.font = "20pt Calibri";
           context.fillStyle = 'ffffff';
           context.fillText("My TEXT!", 70, 60);
       };

       var dataURL = canvas.toDataURL("image/jpg", 1.0);
       document.getElementById('canvasImg').src = dataURL;

   }
   </script>

   <script>
   $(document).ready(function(){
       drawCanvas();
   });
   </script>

最佳答案

你调用canvas.toDataURL("image/jpg", 1.0);在加载图像之前,以及在填充 Canvas 之前。在执行此操作之前,您必须检查图像加载状态:

imageObj2.onload = function() {
       context.drawImage(imageObj2, 0, 0);
       context.font = "20pt Calibri";
       context.fillStyle = 'ffffff';
       context.fillText("My TEXT 2!", 70, 120);


       var imageObj1 = new Image();
       imageObj1.src = "_assets/img/bg_main.jpg";
       imageObj1.onload = function() {
           context.drawImage(imageObj1, 150, 150);
           context.font = "20pt Calibri";
           context.fillStyle = 'ffffff';
           context.fillText("My TEXT!", 70, 60);


           var dataURL = canvas.toDataURL("image/jpg", 1.0);
           document.getElementById('canvasImg').src = dataURL;
       };
    };

关于javascript - 从 Canvas 元素制作图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337204/

相关文章:

javascript - 为什么使用 IE10 的小数运算没有精度损失?

Javascript - 使用 bool 值显示表数据以追加或创建新表

html - CSS中的vertical-align有什么用?

android - 即使移动浏览器改变滚动高度,如何填充网站背景?

c++ - 从数据中创建/放置圆圈/网格的简单数据可视化

asp.net - 没有时区信息的 Javascript ASP.net 日期格式 - 时区偏移

javascript - 这可以重构为使用通用功能原理吗?

html - 在 VSCode 中将制表符大小/空格大小设置为默认值

html - 位置 :fixed inside the wrap block

html - 背景图像溢出不起作用