2014-12-15 2 views
1

Я пытаюсь что-то сделать с ImageMagick, что кажется тривиальной задачей, но я не понимаю.Маскирование альфа-канала с изображением серой шкалы

У меня есть прозрачный PNG (32 бит), и я хочу замаскировать его с полутоновым изображением (также 32 бит). Причиной для файлов, составляющих 32 бита, является то, что они генерируются с помощью инструментов GIS, которые по умолчанию выводят 32 бита. Я бы предпочел не менять это, поскольку все мои файлы уже созданы.

Во всяком случае - это то, что я использую сейчас, чтобы сделать это:

convert     \ 
    alpha_channel.png  \ 
    \(     \ 
     mask.png   \ 
     -colorspace gray \ 
     -alpha off  \ 
    \)     \ 
-compose copy-opacity \ 
-composite    \ 
    PNG32:output.png 

В результате почти сразу, но я думаю, что есть какая-то проблема с битовой глубиной. Это трудно объяснить, но вы можете легко увидеть, посмотрев на файлы и сравнить «output.png» с «expected_output.png»

Вот файлы, которые я работаю с: https://www.dropbox.com/s/855fh8svgt45mqq/images.zip?dl=0

Что ты думаешь, я здесь делаю не так?

+0

Какого выход из ваших 'конвертировать -version' команд? –

+0

Привет. Я сейчас не на своей рабочей станции, чтобы проверить его, но у меня установлены последние двоичные файлы Windows. 6.9 что-то верю. –

ответ

1

Мне кажется, что вся информация находится в альфа-канале альфа-канала файла, но вы используете двухуровневые серые значения из этого файла, а не фактическую информацию, содержащую любой контент.

Image: alpha_channel.png 
    Format: PNG (Portable Network Graphics) 
    Mime type: image/png 
    Class: DirectClass 
    Geometry: 4096x4096+0+0 
    Units: Undefined 
    Type: Bilevel 
    Base type: Bilevel 
    Endianess: Undefined 
    Colorspace: Gray 
    Depth: 8-bit 
    Channel depth: 
    gray: 1-bit 
    alpha: 8-bit 
    Channel statistics: 
    Pixels: 16777216 
    Gray: 
     min: 0 (0) 
     max: 255 (1) 
     mean: 228.324 (0.89539) 
     standard deviation: 78.0429 (0.30605) 
     kurtosis: 4.67613 
     skewness: -2.58382 
     mean: 41.3934 (0.162327) 
     standard deviation: 22.3399 (0.0876074) 
     kurtosis: -0.402954 
     skewness: 0.327285 
    Alpha: graya(0,0) #00000000 
    Colors: 118 
    Histogram: 
    1755067: ( 0, 0, 0, 0) #00000000 graya(0,0) 
    478353: (255,255,255, 37) #FFFFFF25 graya(255,0.145098) 
    378182: (255,255,255, 51) #FFFFFF33 graya(255,0.2) 
    374922: (255,255,255, 47) #FFFFFF2F graya(255,0.184314) 
    368496: (255,255,255, 39) #FFFFFF27 graya(255,0.152941) 
    362982: (255,255,255, 49) #FFFFFF31 graya(255,0.192157) 

И что вы также пытаются отказаться от альфа-канал файла mask.png который не кажется правильным либо, так как он не имеет альфа-канал. Итак, я смущен тем, где ваша информация действительно, или, скорее, то, что вы на самом деле хотите извлечь. Я могу только предложить следующее, которое, кажется, извлекает то, что я думаю, что вы можете хотеть, но не похоже на то, что вы ожидаете. Тем не менее, это может помочь вам получить еще ....

convert alpha_channel.png -alpha extract \ 
    \(mask.png -colorspace gray \) \ 
    -compose copy-opacity -composite out.png 

enter image description here

+0

Спасибо. Вы разоблачили мое невежество, когда дело доходит до ImageMagick :) Я не был уверен, что сделала моя команда, но после долгого сеанса Google это выглядело так, как будто бы я сделал то, что хотел, но явно этого не делал. Похоже, я не объяснил, что конечный результат требуется очень хорошо, поэтому позвольте мне попытаться сделать это здесь ... –

+0

Полученное изображение должно использоваться в Unity3D для шейдера смещения. По техническим причинам изображение не может быть просто полутоновым изображением - оно должно иметь прозрачность, как это делает alpha_channel.png, и оно отлично работает. Мне нужно дополнительно маскировать его с помощью mask.png, сохраняя при этом прозрачность. Это более ясно? Вы можете открыть expect_output.png, чтобы увидеть требуемый результат. Я создал этот образ в фотошопе, используя mask.png в качестве маски слоя на alpha_channel.png. –

+0

Ммм, я не вижу, что ты сделал вообще !!! Я открываю alpha_channel в Photoshop и добавляю маску в качестве маски, и она не выглядит так же, как ваш ожидаемый результат. Затем я наложил ожидаемый результат на верхний и выбранный режим смешивания «разница», который должен быть черным, если нет различий, но различия были огромными. Сделали ли вы несколько шагов в Photoshop? –

Смежные вопросы