キャンバスを使用して画像をダウンロードすると、ファイルのサイズが大きくなります

Lcf.vs

変更を加えずにキャンバスを使用して画像を操作しようとすると、画像のファイルサイズが元の画像よりも大幅に大きくなります。

なぜこれが起こるのか、どうすればこれを回避できるのか説明していただけますか?

https://jsfiddle.net/95rnh4yj/

function one(selector) {
  return document.querySelector(selector);
}

function on(element, event, listener) {
  element.addEventListener(event, listener);
}

function blobToUrl(blob) {
  return Promise.resolve(URL.createObjectURL(blob));
}

function urlToImg(url) {
  return new Promise(function (resolve) {
    let
    img = new Image();

    img.src = url;

    on(img, 'load', function (event) {
       resolve(event.target);
    });
  });
}

function imgToBlob(img) {
  return new Promise(function (resolve) {
    let
    canvas = document.createElement('canvas'),
    context = canvas.getContext('2d');

    canvas.height = img.naturalHeight;
    canvas.width = img.naturalWidth;
    context.fillStyle = 'transparent';
    context.fillRect(0, 0, canvas.width, canvas.height);
    context.save();
    context.drawImage(img, 0, 0);
    canvas.toBlob(resolve, 'image/jpeg', 1);
  });
}

function writeSrc(src) {
  one('a').href = src;
}

on(one('input'), 'change', function(event) {
  blobToUrl(event.target.files[0])
  .then(urlToImg)
  .then(imgToBlob)
  .then(blobToUrl)
  .then(writeSrc);
})
パノスカル。

問題がファイルサイズである場合は、品質設定を変更してください。
現在、これを100に設定しています。たとえば0.95に変更します。

function imgToBlob(img) {
  return new Promise(function (resolve) {
    let
    canvas = document.createElement('canvas'),
    context = canvas.getContext('2d');

    canvas.height = img.naturalHeight;
    canvas.width = img.naturalWidth;
    context.fillStyle = 'transparent';
    context.fillRect(0, 0, canvas.width, canvas.height);
    context.save();
    context.drawImage(img, 0, 0);
    canvas.toBlob(resolve, 'image/jpeg', 0.95); // <-----
  });
}

品質設定を省略して、これが機能するかどうかを確認してください。

function imgToBlob(img) {
  return new Promise(function (resolve) {
    let
    canvas = document.createElement('canvas'),
    context = canvas.getContext('2d');

    canvas.height = img.naturalHeight;
    canvas.width = img.naturalWidth;
    context.fillStyle = 'transparent';
    context.fillRect(0, 0, canvas.width, canvas.height);
    context.save();
    context.drawImage(img, 0, 0);
    canvas.toBlob(resolve, 'image/jpeg');
  });
}

品質設定を省略すると、私にとって最良の結果が得られます(Jsfiddle)。

148kb -> 154kb (jpeg to jpeg)
102kb -> 119Kb

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Android Google Drive API を再ダウンロードするとファイル サイズが大きくなる

分類Dev

System.Net.FtpClientを使用してダウンロードされたファイルのサイズがソースファイルと異なります

分類Dev

大きなバイト配列を使用して大きなファイルをダウンロードすると、「メモリ不足」が発生します

分類Dev

大きなファイルをダウンロードすると、サーバーが誤ったファイルサイズを報告する

分類Dev

大きなファイルをダウンロードすると、サーバーが誤ったファイルサイズを報告する

分類Dev

AzureFunctionを使用してAzureBlob Storageからファイルをダウンロードすると、異なるファイルサイズが返されます

分類Dev

QNetworkreply :: readAllを使用して大きなファイルをダウンロードすると数秒間フリーズします

分類Dev

Javaを使用してAmazonS3に大きなサイズ(1 GBを超える)ファイルをアップロードする:大きなファイルは一時的にサーバーの多くのスペースを消費します

分類Dev

パンダのデータフレームを上書きすると、HDF5ファイルのサイズが大きくなります

分類Dev

VSTSからキャンバス付きのdocxファイルをダウンロードするとWebClientDownloadFileが機能しない

分類Dev

jspdfを使用してロードaspxページをpdfにダウンロードしているときに、このaspxを開いているデバイスのサイズに応じてサイズが異なるpdfを取得しています

分類Dev

NPM-サブ依存関係をインストールすると、パッケージバンドルのサイズが大きくなりますか?

分類Dev

c#ドットネットにapkファイルのダウンロード機能を追加しましたが、ダウンロード後のファイルサイズが実際のAPKファイルサイズと異なります

分類Dev

Tkinter:ウィンドウのサイズを変更するスクロールバーを使用して固定キャンバスサイズを作成する方法

分類Dev

WPF:ウィンドウサイズを大きくするとパフォーマンスが低下します

分類Dev

特定のサイズよりも大きいファイルをダウンロードする

分類Dev

同じ値でテーブルを更新すると、トランザクションログファイルのサイズが大きくなりますか?

分類Dev

外部ファイルから呼び出したときにcropphpを使用して画像のサイズを変更すると、オンラインサーバーに画像が表示されないという問題があります。

分類Dev

Angularファイルセーバーで大きなサイズのファイルをダウンロードする

分類Dev

wgetがXサイズより大きいファイルをダウンロードしないようにする

分類Dev

キャンバスチャートjsのサイズがウィンドウの高さと幅に等しくなるのを防ぎます

分類Dev

「BadValueError:名前は500バイト未満である必要があります。」大きなファイルをダウンロードするとき

分類Dev

リクエストを使用してPythonで大きなファイルをダウンロードする

分類Dev

IOS:サーバーから大きなサイズのファイルをダウンロードするための最良の方法はどれですか

分類Dev

Powershellを使用して複数の大きなファイルを非同期でダウンロードする

分類Dev

RESTテンプレートJava Spring MVCを使用してサーバーから大きなファイルをダウンロードする

分類Dev

hrefタグ付きのファイルをダウンロードすると、ファイルが判読できなくなります

分類Dev

イーサネットインターフェイスを介して大きなデータをアップロードまたはダウンロードするときに、Linuxカーネルがフリーズしていないことを確認するにはどうすればよいですか?

分類Dev

scpを使用してサーバーからファイルをダウンロードするときにエラーが発生しました

Related 関連記事

  1. 1

    Android Google Drive API を再ダウンロードするとファイル サイズが大きくなる

  2. 2

    System.Net.FtpClientを使用してダウンロードされたファイルのサイズがソースファイルと異なります

  3. 3

    大きなバイト配列を使用して大きなファイルをダウンロードすると、「メモリ不足」が発生します

  4. 4

    大きなファイルをダウンロードすると、サーバーが誤ったファイルサイズを報告する

  5. 5

    大きなファイルをダウンロードすると、サーバーが誤ったファイルサイズを報告する

  6. 6

    AzureFunctionを使用してAzureBlob Storageからファイルをダウンロードすると、異なるファイルサイズが返されます

  7. 7

    QNetworkreply :: readAllを使用して大きなファイルをダウンロードすると数秒間フリーズします

  8. 8

    Javaを使用してAmazonS3に大きなサイズ(1 GBを超える)ファイルをアップロードする:大きなファイルは一時的にサーバーの多くのスペースを消費します

  9. 9

    パンダのデータフレームを上書きすると、HDF5ファイルのサイズが大きくなります

  10. 10

    VSTSからキャンバス付きのdocxファイルをダウンロードするとWebClientDownloadFileが機能しない

  11. 11

    jspdfを使用してロードaspxページをpdfにダウンロードしているときに、このaspxを開いているデバイスのサイズに応じてサイズが異なるpdfを取得しています

  12. 12

    NPM-サブ依存関係をインストールすると、パッケージバンドルのサイズが大きくなりますか?

  13. 13

    c#ドットネットにapkファイルのダウンロード機能を追加しましたが、ダウンロード後のファイルサイズが実際のAPKファイルサイズと異なります

  14. 14

    Tkinter:ウィンドウのサイズを変更するスクロールバーを使用して固定キャンバスサイズを作成する方法

  15. 15

    WPF:ウィンドウサイズを大きくするとパフォーマンスが低下します

  16. 16

    特定のサイズよりも大きいファイルをダウンロードする

  17. 17

    同じ値でテーブルを更新すると、トランザクションログファイルのサイズが大きくなりますか?

  18. 18

    外部ファイルから呼び出したときにcropphpを使用して画像のサイズを変更すると、オンラインサーバーに画像が表示されないという問題があります。

  19. 19

    Angularファイルセーバーで大きなサイズのファイルをダウンロードする

  20. 20

    wgetがXサイズより大きいファイルをダウンロードしないようにする

  21. 21

    キャンバスチャートjsのサイズがウィンドウの高さと幅に等しくなるのを防ぎます

  22. 22

    「BadValueError:名前は500バイト未満である必要があります。」大きなファイルをダウンロードするとき

  23. 23

    リクエストを使用してPythonで大きなファイルをダウンロードする

  24. 24

    IOS:サーバーから大きなサイズのファイルをダウンロードするための最良の方法はどれですか

  25. 25

    Powershellを使用して複数の大きなファイルを非同期でダウンロードする

  26. 26

    RESTテンプレートJava Spring MVCを使用してサーバーから大きなファイルをダウンロードする

  27. 27

    hrefタグ付きのファイルをダウンロードすると、ファイルが判読できなくなります

  28. 28

    イーサネットインターフェイスを介して大きなデータをアップロードまたはダウンロードするときに、Linuxカーネルがフリーズしていないことを確認するにはどうすればよいですか?

  29. 29

    scpを使用してサーバーからファイルをダウンロードするときにエラーが発生しました

ホットタグ

アーカイブ