簡體   English   中英

使用Fabric JS和FileReader API在Canvas中使用SVG

[英]SVG in Canvas using fabric js and FileReader API

我嘗試使用Fabric JSFile Reader API在Canvas中讀取SVG

以下用於Image的代碼,它將與SVG一起使用,但不會使用完整的功能,例如更改顏色( setFill )和僅適用於SVG的其他功能

 var reader = new FileReader(), input = document.getElementById('imgFile'); reader.onload = function (event) { //loadSVGFromString var imgObj = new Image(); imgObj.src = event.target.result; imgObj.onload = function () { // start fabricJS stuff var coord = getRandomLeftTop(); var image = new fabric.Image(imgObj); if($scope.ImgOption != 'bg'){ image.set({ left: coord.left, top: coord.top }); canvas.add(image); }else{ image.set({ scaleY: canvas.height / imgObj.height, scaleX: canvas.width / imgObj.width }); canvas.setBackgroundImage(image, canvas.renderAll.bind(canvas)); } // end fabricJS stuff } } 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script> 

我通過檢查文件類型是否為svg來解決此問題,我使用loadSVGFromString方法將對象呈現為svg路徑並為其着色

function reader(e){
      var FileType='';
      if(!window.FileReader && !window.File && !window.FileList && !window.Blob){
         var IEversion = detectIE();
         if (IEversion !== false) {
            if(IEversion == 9 || IEversion == 8) {
               alertify.alert("You're useing IE v"+IEversion+", /n Pleaase upgrade IE to v10 or higher in order to use the app features!"); // in html5 works and fires alert but not in IE8 
            }
         }
         return;
      }
        var reader = new FileReader(), input = document.getElementById('imgFile');

      reader.onload = function (event) {

       var coord = getRandomLeftTop();
        if(FileType == 'svg'){
            fabric.loadSVGFromString(event.target.result, function(objects, options) {
                 var loadedObject = fabric.util.groupSVGElements(objects, options);
                 loadedObject.set({
                    left: coord.left,
                    top: coord.top
                 }).setCoords();
                 canvas.add(loadedObject);
              });
        }else{
            var imgObj = new Image();
            imgObj.src = event.target.result;
            imgObj.onload = function () {
                // start fabricJS stuff
                var image = new fabric.Image(imgObj);
                   if($scope.ImgOption != 'bg'){
                    image.set({
                        left: coord.left,
                        top: coord.top
                    });
                    canvas.add(image);
                }else{
                    image.set({
                        scaleY: canvas.height / imgObj.height,
                      scaleX: canvas.width / imgObj.width
                    });
                    canvas.setBackgroundImage(image, canvas.renderAll.bind(canvas));
                }
                // end fabricJS stuff
             }
          }
      }

      if (!input) {
         alertify.alert("Um, couldn't find the fileinput element.");
      } else if (!input.files) {
         alertify.alert("This browser doesn't seem to support the `files` property of file inputs.");
      } else if (!input.files[0]) {
         alertify.alert("Please select a file before clicking 'Load'");
      } else {
         file = input.files[0];
         if (file.type == 'image/svg+xml') {
             FileType = 'svg';
             reader.readAsText(file);//readAsText(file);
         }else{
               FileType = 'image';
               reader.readAsDataURL(file);
         }
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM