heic 形式の画像ファイルを jpeg に変換する方法のメモ。
■heic-convert のインストール
npm install heic-convert
npm install --save-dev @types/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);
})();
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....<
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......<
0000000 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 >......JFIF......<
jpeg のマジックナンバーは 0xff 0xd8 のため、jpeg に変換されていることがわかります。