3テラバイト

プログラム関連備忘録サイト。主にゲーム。

HTML JavaScript

JavaScriptでバイナリからpngファイルを識別する

投稿日:

input要素で指定した画像がpngファイルか確認し、pngファイルだった場合にその幅と高さをコンソールに出力しています。

<html>
  <head>
  </head>
  <body>
    <form action="" method="post" enctype="multipart/form-data">
      <input accept="image/*" type="file" id="uploadImage">
      <p><img id="thumbnail" src=""></p>
    </form>
    <script>
      uploadImage.onchange = event => {
        const [file] = uploadImage.files
        if (file) {
          let reader = new FileReader();
          reader.onload = (e) => {
            let encodedData = btoa(
              Array.from(
                new Uint8Array(e.target.result),
                x => String.fromCharCode(x)
              ).join('')
            );
            thumbnail.src = `data:image/png;base64,${encodedData}`;

            const header = new Uint8Array(e.target.result.slice(0, 8));
            const headerHexStr = header.reduce((a, c) => a + (a === '' ? '' : ' ') + c.toString(16).toUpperCase().padStart(2, '0'), '');
            const magicNumber = '89 50 4E 47 0D 0A 1A 0A';

            if (headerHexStr === magicNumber)
            {
              let dataView = new DataView(e.target.result, 0x08);
              let width = dataView.getUint32(0x08, false);
              let height = dataView.getUint32(0x0C, false);

              console.log(width);
              console.log(height);
            }
          }
          reader.readAsArrayBuffer(file);
        }
      }
    </script>
  </body>
</html>

-HTML, JavaScript


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

関連記事

no image

JavaScriptで配列やオブジェクトの一部を代入する分割代入

JavaScriptで変数に配列やオブジェクトから値を代入する際に、左辺の変数名に角括弧[]を付けることで配列やオブジェクトの一部のみ代入することが可能です。 以下の例では変数aに右辺の配列の内最初の …

no image

JavaScriptで値を素因数分解する

以下のコードでは、渡された値を素因数分解して文字列で結果を返す関数primeFactorizationを定義しています。 function primeFactorization(value) { va …

no image

JavaScriptでブラウザ履歴の前のページや次のページへ移動する

前のページへ window.history.back() 次のページへ window.history.forward() 指定ページ数前へ window.history.go関数の引数にマイナスの数値 …

no image

ブラウザとモバイルデバイス用のインタラクティブチャートを実装するJavaScriptチャートライブラリGoogle Chartsの使い方

公式サイト https://developers.google.com/chart サンプルコード <html> <head> <script type="te …

no image

チャートを簡単に追加できるJavaScriptライブラリChart.jsの使い方

折れ線グラフ、棒グラフ、レーダーチャート、ドーナツチャート、円グラフ、ポーラチャート、バブルチャート、散布図等のチャートをWebサイトに簡単に追加することができます。 公式サイト https://ww …