dlemstra / magick-wasm

The WASM library for ImageMagick
Apache License 2.0
533 stars 34 forks source link

Error when saving HEIC image #174

Open erkserkserks opened 1 week ago

erkserkserks commented 1 week ago

magick-wasm version

0.0.30

Description

Hello, thanks for this great project!

I'm encountering an issue when attempting to save an image in HEIC format. The error message is below (see "Steps to Reproduce" for the code):

node index.js 
Z [Error]: NoEncodeDelegateForThisImageFormat `HEIC' @ error/constitute.c/WriteImage/1409
    at T.createError (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:833:36)
    at T.throw (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:829:17)
    at T.checkException (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:811:14)
    at file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:803:16
    at Ge.use (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:777:14)
    at T.use (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:801:15)
    at ne.useException (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:2784:14)
    at ne.write (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:2654:60)
    at file:///home/user/dev/magick_test/index.js:15:15
    at file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:7428:14 {
  _relatedErrors: [
    Z [Error]: UnableToOpenConfigureFile `delegates.xml' @ warning/configure.c/GetConfigureOptions/722
        at T.createError (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:833:36)
        at T.createError (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:838:95)
        at T.throw (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:829:17)
        at T.checkException (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:811:14)
        at file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:803:16
        at Ge.use (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:777:14)
        at T.use (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:801:15)
        at ne.useException (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:2784:14)
        at ne.write (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:2654:60)
        at file:///home/user/dev/magick_test/index.js:15:15 {
      _relatedErrors: [],
      severity: 395
    },
    Z [Error]: NoEncodeDelegateForThisImageFormat `HEIC' @ warning/constitute.c/WriteImage/1400
        at T.createError (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:833:36)
        at T.createError (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:838:95)
        at T.throw (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:829:17)
        at T.checkException (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:811:14)
        at file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:803:16
        at Ge.use (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:777:14)
        at T.use (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:801:15)
        at ne.useException (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:2784:14)
        at ne.write (file:///home/user/dev/magick_test/node_modules/@imagemagick/magick-wasm/dist/index.js:2654:60)
        at file:///home/user/dev/magick_test/index.js:15:15 {
      _relatedErrors: [],
      severity: 320
    }
  ],
  severity: 420
}

Steps to Reproduce

Here is the code to reproduce the issue:

import { readFileSync, writeFileSync } from 'node:fs';
import {
    initializeImageMagick,
    ImageMagick,
    MagickFormat,
} from '@imagemagick/magick-wasm';

const wasmLocation = 'node_modules/@imagemagick/magick-wasm/dist/magick.wasm';
const wasmBytes = readFileSync(wasmLocation);

async function openImage(inputPath, outputPath) {
    await initializeImageMagick(wasmBytes);

    ImageMagick.read(readFileSync(inputPath), (image) => {
        image.write(MagickFormat.Heic, (data) => {
            writeFileSync(outputPath, data);
            console.log(`Image saved to ${outputPath}`);
        });
    });
}

// Usage
const inputImagePath = 'input.heic';
const outputImagePath = 'output.heic';

openImage(inputImagePath, outputImagePath).catch(console.error);

Images

Here is the HEIC image to reproduce the issue:

input.zip

dlemstra commented 1 week ago

There is no support for writing HEIC images due to license issues. There is only support for writing AVIF files.

erkserkserks commented 1 week ago

Thanks for the info. Is the licensing situation different from native ImageMagick?

dlemstra commented 1 week ago

That licensing situation is the same for when you would use ImageMagick on the command line but I suspect people tend to ignore that.