Estou mexendo no navegador / wasm ImageMagick API e ele tem um MagickFormat
módulo aqui que se parece essencialmente com isto:
export declare enum MagickFormat {
Unknown = "UNKNOWN",
ThreeFr = "3FR",
ThreeG2 = "3G2",
ThreeGp = "3GP",
A = "A",
Aai = "AAI",
Ai = "AI",
Apng = "APNG",
Art = "ART",
Arw = "ARW",
Ashlar = "ASHLAR",
Avi = "AVI",
Avif = "AVIF",
Avs = "AVS",
B = "B",
Bayer = "BAYER",
Bayera = "BAYERA",
Bgr = "BGR",
Bgra = "BGRA",
Bgro = "BGRO",
Bmp = "BMP",
Bmp2 = "BMP2",
Bmp3 = "BMP3",
Brf = "BRF",
C = "C",
Cal = "CAL",
Cals = "CALS",
Canvas = "CANVAS",
Caption = "CAPTION",
Cin = "CIN",
Cip = "CIP",
Clip = "CLIP",
Cmyk = "CMYK",
Cmyka = "CMYKA",
Cr2 = "CR2",
Cr3 = "CR3",
...
Essencialmente, ele lista cerca de 260 formatos, mas não diz quais são permitidos como entrada e quais são permitidos como saída . Tentei converter um PNG para CR2, mas a API wasm falhou com:
Error: NoEncodeDelegateForThisImageFormat `CR2' @ error/constitute.c/WriteImage/1409
Eu sabia que isso iria falhar porque li em algum site aleatório que não me lembro, que CR2 é o formato camera raw da Canon, e eles só podem tomá-lo como entrada e usá-lo para gerar saídas mais simples, como JPG/PNG/etc .. Mas minha pergunta é: quais são exatamente os formatos de entrada e saída permitidos para o ImageMagick? Como posso descobrir isso? Existe uma maneira de listá-los de alguma forma com a API (que eu posso então descobrir para traduzir para a API wasm)? Idealmente, não é um exemplo de CLI, mas um exemplo de API de código-fonte, eu acho.
Todos aqueles incluídos MagickFormat
são permitidos como formatos de entrada? E apenas um subconjunto de formatos de saída? Ou onde posso encontrar quais são permitidos para quais? Ah, e relacionado, depende da entrada qual saída é permitida? (Tipo, é uma matriz do tipo "JPG pode ser convertido em X e Y, mas não em Z, mas PNG pode ser convertido em X e Z, mas não em Y", ou é mais simples do que isso?) Estou parcialmente curioso neste processo, se você tiver que criar uma lista de mapeamentos um-para-muitos para cada tipo de entrada para as saídas possíveis para essa entrada, ou se for mais genérico que isso.
Objetivo principal: descobrir quais operações posso fazer.
Também vi a supportedFormats
propriedade , mas não tenho certeza se isso resolve totalmente o meu problema.