Автоматически ли создается содержимое тега HTML Canvas в виде файла PNG?

#javascript #html #canvas

#javascript #HTML #холст

Вопрос:

Когда я щелкаю правой кнопкой мыши по изображению, которое было добавлено в <canvas> тег, единственным типом файла, который можно сохранить как, является .png . Даже если загруженный файл имеет формат .jpeg, единственным вариантом, отображаемым в меню сокращений к Save Image As , является файл .png. Данные изображения отображаются в <canvas> теге в виде файла png?

HTML

 <form class='frmUpload'>
  <input name="picOneUpload" type="file" accept="image/*" onchange="picUpload(this.files[0])" >
</form>

<canvas id="cnvsForFormat" width="400" height="266"></canvas>
  

СКРИПТ

 window.picUpload = function(frmData) {
  console.log("picUpload ran: "   frmData);

    var cnvs=document.getElementById("cnvsForFormat");
    console.log("cnvs: "   cnvs);
    var ctx=cnvs.getContext("2d");
    cnvs.style.border="1px solid #c3c3c3";

    var img = new Image;

    img.src = URL.createObjectURL(frmData);

    img.onload = function() {
      var picWidth = this.width;
      var picHeight = this.height;
      var wdthHghtRatio = picHeight/picWidth;

      console.log('picWidth: '   Number(picWidth));
      console.log('picHeight: '   Number(picHeight));
      console.log('wdthHghtRatio: '   wdthHghtRatio);

      if (Number(picWidth) > 400) {
        var newHeight = Math.round(Number(400) * wdthHghtRatio);
      } else {
        return false;
      };

      document.getElementById('cnvsForFormat').height = newHeight;
      console.log('width: '   picWidth   " h: "   picHeight);
      console.log('width: 400  h: '   newHeight);
      //Must change the width and height settings in order to decrease the image size, but
        //it needs to be proportional to the original dimensions.
        ctx.drawImage(img,0,0, 400, newHeight);
    };
  

jsFiddle Загружает изображение и рисует на Canvas в новом размере

Комментарии:

1. В принципе, да. В PNG нет потерь, в отличие от JPEG, и не ограничено 256 цветами, как в GIF, и в нем есть сжатие, в отличие от BMP. Поэтому наиболее разумно сохранить его таким образом.

Ответ №1:

Собственный формат содержимого html5 canvas — это растровое изображение.

На самом деле это лучше всего описать как пиксельную карту, но думайте об этом как о растровом изображении.

Вы не можете щелкнуть правой кнопкой мыши-сохранить-как элемент canvas, но вы можете:

  • получите растровое изображение canvas в виде файла данных png с помощью .toDataURL().

  • получите растровое изображение canvas в виде файла данных jpg с помощью .toDataURL(‘изображение /jpeg’).

  • получите / задайте данные растрового изображения в пикселях с помощью context.getImageData.

Комментарии:

1. цитата: «Элемент canvas представляет растровый холст, зависящий от разрешения» w3.org Холст