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.
O método mais simples que conheço está no Terminal:
e procure
r
por leitura ew
gravação na segunda coluna :Saída
Você pode ir de qualquer formato para qualquer outro - obviamente, desde que a fonte de entrada seja legível e o destino de saída seja gravável. O "superformato abrangente" que pode representar tudo o que o ImageMagick conhece (por exemplo, amostras inteiras/flutuantes/complexas de 8/16/32/64 bits, transparência, dezenas de canais, dados EXIF/XMP/IPTC, atrasos GIF) é
MIFF
- então ele passa essencialmente por esse formato de qualquer entrada para qualquer saída.Da mesma forma, se você quiser saber quais "modos de composição/mesclagem" o ImageMagick suporta, você pode usar:
Saída
O "supercomando" que diz tudo o que você poderia colocar depois
identify -list
, ou seja, "me dê uma lista de listas" , é:Saída
Assim você pode obter uma lista de todos os nomes de canais disponíveis, todos os tipos de compressão, todos os espaços de cores, todas as opções de interpolação, todas as opções de gravidade, todas as opções de entrelaçamento, todos os possíveis tipos de pixels virtuais...