dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

TypeScript で avif ファイルを jpeg に変換

2024-03-22 23:52:24 | Node.js
TypeScript で avif ファイルを jpeg に変換する方法のメモ。
■sharp のインストール
npm install sharp
■プログラム
import { readFileSync, writeFileSync } from 'fs';
import sharp from 'sharp';

(async () => {
  const inFile = process.argv[2];
  const outFile = process.argv[3];

  await sharp(inFile).jpeg().toFile(outFile);
})();

heic 形式の画像ファイルを jpeg に変換

2024-03-22 00:14:37 | Node.js
heic 形式の画像ファイルを jpeg に変換する方法のメモ。

■heic-convert のインストール
npm install heic-convert
npm install --save-dev @types/heic-convert

■プログラム
import { readFileSync, writeFileSync } from 'fs'
import convert from 'heic-convert'

(async () => {
const inFile = process.argv[2];
const outFile = process.argv[3];

const inBuf = readFileSync(inFile);
const outBuf = await convert({
buffer: inBuf,
format: 'PNG',
quality: 1,
});
const outArr = new Uint8Array(outBuf);
writeFileSync(outFile, outArr);
})();

上記のプログラムで heic を jpeg に変換します。
$ ts-node heic_to_heic.ts img.heic img.png

■heic 形式のファイルのマジックナンバーを確認
$ cat img.heic | od -tx1z | head -1
0000000 00 00 00 1c 66 74 79 70 68 65 69 63 00 00 00 00 >....ftypheic....<

マジックナンバーは5バイト目以降が ftypheic のため、HEIC であることが確認できます。

■jpeg 形式のファイルのマジックナンバーを確認
$ cat img.jpg | od -tx1z | head -1
0000000 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01  >......JFIF......<
jpeg のマジックナンバーは 0xff 0xd8 のため、jpeg に変換されていることがわかります。