【问题标题】:Scaling Background Image for Clarity缩放背景图像以提高清晰度
【发布时间】:2018-02-21 04:45:01
【问题描述】:

我正在使用fabricjs 库的最新版本(1.7.22),并试图通过加载更大的图像然后缩放它们以适合画布来使我的可切换图像更清晰。我试过缩放图像但没有运气。我基本上希望框架图像适合画布。如您所见,图像是应有大小的两倍。我做错了什么?

我的代码

var canvas = [],
  image;
canvas.push(new fabric.Canvas('c0'));
for (i = 1; i <= 7; i++) {
  canvas.push(new fabric.StaticCanvas('sc' + i));
}

function dropText() {
  var text = new fabric.IText('Type here...', {
    fontSize: 27,
    top: 10,
    left: 10,
  });
  canvas[0].add(text);
}

canvas[0].on('object:added', onModified);
canvas[0].on('object:modified', onModified);
canvas[0].on('object:scaling', onModified);
canvas[0].on('object:moving', onModified);

function onModified(option) {
  var ob = option.target;
  var index = canvas[0].getObjects().indexOf(ob);
  ob.clone(function(obj) {
    for (i = 1; i <= 7; i++) {
      canvas[i].insertAt(obj, index, true);
    }
  });
};

$('#update').click(function() {
  updateCanvas();
});

function updateCanvas() {
  var json = JSON.stringify(canvas[0]);
  for (i = 1; i <= 7; i++) {
    canvas[i].loadFromJSON(json);
  }
}
// Toggling Images
function replaceImage(imgUrl) {
  if (!isImageLoaded) return; //return if initial image not loaded
  image.setSrc(imgUrl, function() {
    canvas[0].renderAll();
    updateCanvas();
  });
}

// Default (Blank)
fabric.Image.fromURL('https://i.imgur.com/SamdNdX.png', function(img) {
  isImageLoaded = true;
  image = img.set({
    selectable: false,
    evented: false,
    scale: 0.5,
  });
  canvas[0].add(image);
  canvas[0].sendToBack(image);
  updateCanvas();
});

$('#save').click(function() {
  html2canvas($('#imagesave'), {
    onrendered: function(canvas) {
      var a = document.createElement('a');
      // toDataURL defaults to png, so we need to request a jpeg, then convert for file download.
      a.href = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream");
      a.download = 'myfile.jpg';
      a.click();
    }
  });
});
body {
  margin: 0px;
  padding: 0px;
}

canvas {
  border: 1px solid #f00;
  margin: 0px;
  display: block;
}

td {
  margin: 0;
  padding: 0;
  border: 0;
  outline: 0;
  vertical-align: baseline;
}

#imagesave {
  background-color: white;
  height: 637.5px;
  width: 825px;
  padding-left: 75px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.js"></script>

<button onclick="dropText();" class="dropdown-item">Add Text</button><button id="save">Save</button>
<button onclick="replaceImage('https://i.imgur.com/SamdNdX.png')">Blank</button>
<button onclick="replaceImage('https://i.imgur.com/RuZ5HTH.png')">Image A Pic</button>
<button onclick="replaceImage('https://i.imgur.com/u3Knj4R.png')">Image B Pic</button>

<div id="imagesave">

  <table>
    <tr>
      <td>
        <canvas id="c0" width="187.5" height="318.75"></canvas>
      </td>
      <td>
        <canvas id="sc1" width="187.5" height="318.75"></canvas>
      </td>
      <td>
        <canvas id="sc2" width="187.5" height="318.75"></canvas>
      </td>
      <td>
        <canvas id="sc3" width="187.5" height="318.75"></canvas>
      </td>
    </tr>
    <tr>
      <td>
        <canvas id="sc4" width="187.5" height="318.75"></canvas>
      </td>
      <td>
        <canvas id="sc5" width="187.5" height="318.75"></canvas>
      </td>
      <td>
        <canvas id="sc6" width="187.5" height="318.75"></canvas>
      </td>
      <td>
        <canvas id="sc7" width="187.5" height="318.75"></canvas>
      </td>
    </tr>
  </table>

</div>

当我保存时,我的背景似乎也没有粘住,但我想这是以后的问题。

【问题讨论】:

    标签: fabricjs


    【解决方案1】:

    我最终发现我做错了什么。我在发布之前尝试的缩放很好,我只是在分号之后写它。解决办法:

    var canvas = [],
      image;
    canvas.push(new fabric.Canvas('c0'));
    for (i = 1; i <= 7; i++) {
      canvas.push(new fabric.StaticCanvas('sc' + i));
    }
    
    function dropText() {
      var text = new fabric.IText('Type here...', {
        fontSize: 27,
        top: 10,
        left: 10,
      });
      canvas[0].add(text);
    }
    
    canvas[0].on('object:added', onModified);
    canvas[0].on('object:modified', onModified);
    canvas[0].on('object:scaling', onModified);
    canvas[0].on('object:moving', onModified);
    
    function onModified(option) {
      var ob = option.target;
      var index = canvas[0].getObjects().indexOf(ob);
      ob.clone(function(obj) {
        for (i = 1; i <= 7; i++) {
          canvas[i].insertAt(obj, index, true);
        }
      });
    };
    
    $('#update').click(function() {
      updateCanvas();
    });
    
    function updateCanvas() {
      var json = JSON.stringify(canvas[0]);
      for (i = 1; i <= 7; i++) {
        canvas[i].loadFromJSON(json);
      }
    }
    // Toggling Images
    function replaceImage(imgUrl) {
      if (!isImageLoaded) return; //return if initial image not loaded
      image.setSrc(imgUrl, function() {
        canvas[0].renderAll();
        updateCanvas();
      });
    }
    
    // Default (Blank)
    fabric.Image.fromURL('https://i.imgur.com/SamdNdX.png', function(img) {
      isImageLoaded = true;
      image = img.set({
        selectable: false,
        evented: false,
      }).scale(0.5);
      canvas[0].add(image);
      canvas[0].sendToBack(image);
      updateCanvas();
    });
    
    $('#save').click(function() {
      html2canvas($('#imagesave'), {
        onrendered: function(canvas) {
          var a = document.createElement('a');
          // toDataURL defaults to png, so we need to request a jpeg, then convert for file download.
          a.href = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream");
          a.download = 'myfile.jpg';
          a.click();
        }
      });
    });
    body {
      margin: 0px;
      padding: 0px;
    }
    
    canvas {
      border: 1px solid #f00;
      margin: 0px;
      display: block;
    }
    
    td {
      margin: 0;
      padding: 0;
      border: 0;
      outline: 0;
      vertical-align: baseline;
    }
    
    #imagesave {
      background-color: white;
      height: 637.5px;
      width: 825px;
      padding-left: 75px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.js"></script>
    
    <button onclick="dropText();" class="dropdown-item">Add Text</button><button id="save">Save</button>
    <button onclick="replaceImage('https://i.imgur.com/SamdNdX.png')">Blank</button>
    <button onclick="replaceImage('https://i.imgur.com/RuZ5HTH.png')">Image A Pic</button>
    <button onclick="replaceImage('https://i.imgur.com/u3Knj4R.png')">Image B Pic</button>
    
    <div id="imagesave">
    
      <table>
        <tr>
          <td>
            <canvas id="c0" width="187.5" height="318.75"></canvas>
          </td>
          <td>
            <canvas id="sc1" width="187.5" height="318.75"></canvas>
          </td>
          <td>
            <canvas id="sc2" width="187.5" height="318.75"></canvas>
          </td>
          <td>
            <canvas id="sc3" width="187.5" height="318.75"></canvas>
          </td>
        </tr>
        <tr>
          <td>
            <canvas id="sc4" width="187.5" height="318.75"></canvas>
          </td>
          <td>
            <canvas id="sc5" width="187.5" height="318.75"></canvas>
          </td>
          <td>
            <canvas id="sc6" width="187.5" height="318.75"></canvas>
          </td>
          <td>
            <canvas id="sc7" width="187.5" height="318.75"></canvas>
          </td>
        </tr>
      </table>
    
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2021-07-23
      • 2015-06-22
      • 2013-06-04
      • 1970-01-01
      相关资源
      最近更新 更多