Imagemagick преобразовать tif в rgba16 png

Итак, вот мое исходное изображение в формате tif:

$ identify -verbose source.tif
Image: 
  Format: TIFF (Tagged Image File Format)
  Class: DirectClass
  Geometry: 512x512+0+0
  Resolution: 72x72
  Print size: 7.11111x7.11111
  Units: PixelsPerInch
  Type: Palette
  Base type: TrueColor
  Endianess: MSB
  Colorspace: RGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 1-bit

И я пробовал: convert source.tif output.png

И вот результаты:

$ identify -verbose output.png 
  Format: PNG (Portable Network Graphics)
  Class: DirectClass
  Geometry: 512x512+0+0
  Resolution: 28.34x28.34
  Print size: 18.0663x18.0663
  Units: PixelsPerCentimeter
  Type: Palette
  Endianess: Undefined
  Colorspace: RGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 1-bit

Но я не вижу, как сделать PNG в формате RGBA16. Что, как я понимаю, означает, что ему нужна глубина 16 бит и альфа-канал.


person Greg    schedule 27.02.2015    source источник
comment
Это вся ваша командная строка? Таким образом, кажется, нет причин обновлять каналы назначения, потому что источник точно подходит.   -  person Jongware    schedule 27.02.2015
comment
Я не уверен, что понимаю.   -  person Greg    schedule 27.02.2015
comment
Ваш входной формат 8-8-1 (что, кстати, необычно), похоже, преобразован в точно такой же формат в PNG. Команда convert сделала то, что вы ей сказали, ничего страшного. Возможно, вам нужно сказать, что вам нужен 16-битный вывод (который, если я правильно понимаю, требует понижающей дискретизации до 4-4-4-4 каналов).   -  person Jongware    schedule 27.02.2015


Ответы (1)


Как правило, ImageMagick будет использовать наиболее экономичный формат вывода, который совместим с вашими спецификациями. Итак, если ваше входное изображение не имеет альфа-канала (т.е. прозрачности), ваше выходное изображение не будет иметь прозрачности. Если 256-цветная палитра подходит для цветов вашего изображения, будет создано выходное изображение с палитрой. Если 8-битная глубина вывода подходит для вашего изображения, он не будет беспокоиться о создании 16-битного вывода. И так далее...

Если вы хотите заставить ImageMagick делать что-то другое, у вас есть несколько вариантов.

Если вы хотите принудительно использовать истинный цвет или палитру (индексированный) выходной файл, вы можете сделать это:

convert input.png -type palette   output.png  # Force palettised (indexed) output
convert input.png -type truecolor output.png  # Force true colour output

Если вы хотите принудительно использовать 8-битную или 16-битную версию, вы можете сделать это:

convert input.png -depth 8   output.png  # Force 8-bit output
convert input.png -depth 16  output.png  # Force 16-bit (per channel) output  

Если вы хотите принудительно использовать альфа-канал / канал прозрачности, вы можете:

convert input.tif -type TrueColorAlpha output.png  # Force a true color output with transparency

И их тоже можно комбинировать. Если вы хотите увидеть параметры type, используйте эту команду:

identify -list type

Bilevel
ColorSeparation
ColorSeparationAlpha
ColorSeparationMatte
Grayscale
GrayscaleAlpha
GrayscaleMatte
Optimize
Palette
PaletteBilevelAlpha
PaletteBilevelMatte
PaletteAlpha
PaletteMatte
TrueColorAlpha
TrueColorMatte
TrueColor

Кроме того, особенно в случае файлов PNG, вы также можете принудительно выводить вывод, указав тип PNG заглавными буквами, за которым следует двоеточие перед именем файла вывода, таким образом:

convert input.tif PNG64:output.png     # Force 64-bit RGBA (3 channels @ 16-bits each, plus alpha)
convert input.tif PNG32:output.png     # Force 32-bit RGBA (3 channels @ 8-bits each, plus alpha)
convert input.tif PNG48:output.png     # Force 48-bit output (3 channels @ 16-bits each, no alpha)
convert input.tif PNG24:output.png     # Force 24-bit output (3 channels @ 8-bits each, no alpha)

Итак, краткий ответ

convert input.tif PNG64:output.png

or

convert input.tif -depth 16 -type TrueColorAlpha output.png

Однако будьте осторожны, ImageMagick переопределит вторую версию, если во входном изображении нет альфа-канала, тогда как он не будет этого делать, если вы используете PNG64:.

person Mark Setchell    schedule 28.02.2015
comment
Спасибо за объяснение! Так почему это PNG64, если я хочу rgba16? - person Greg; 02.03.2015
comment
Потому что 4 канала по 16 бит каждый = 64 - person Mark Setchell; 02.03.2015
comment
По какой-то причине я получаю эту ошибку с помощью команды: convert: невозможно открыть изображение `PNG64: output.png ': @ error / blob.c / OpenBlob / 2517. - person Greg; 04.03.2015
comment
Что произойдет, если вы запустите convert -size 100x100 xc:black a.png - person Mark Setchell; 04.03.2015
comment
Мне также кажется, что мне не хватает TrueColorAlpha, когда я запускаю identify -list type - person Greg; 04.03.2015
comment
Хорошо, попробуй convert -size 100x100 xc:black PNG64:a.png - person Mark Setchell; 04.03.2015
comment
Думаю у вас старая версия, попробуйте identify -version - person Mark Setchell; 04.03.2015
comment
В вашей последней предыдущей команде я получил: convert: no encode delegate для этого формата изображения `PNG64: ~ / a.png '@ error / Create.c / WriteImage / 1189. - person Greg; 04.03.2015
comment
Для версии я получил Version: ImageMagick 6.6.4-1 2010-12-17 - person Greg; 04.03.2015
comment
Это древний :-( Вам обязательно нужно будет обновить. - person Mark Setchell; 04.03.2015