1

나는 투명 PNG 이미지를 가지고 :이미 ImageMagick으로 투명도가있는 이미지에 그라데이션 마스크를 적용 하시겠습니까?

original.png
Original

지금 나는 그것의 알파 채널에 대각선 그라데이션을 적용 에 ImageMagick를 사용하려는. 나는 그 불투명도가 왼쪽 위 구석에 ​​남아 있고 점차 사라져서 오른쪽 아래 구석에 완전히 투명하게 변한다는 것을 의미합니다. 이처럼 :

result.png
Result

그래서 기본적으로 내가 그라디언트를 생성하고, 그 사용하고자하는 이미지의 마스크로. 그러나 이미지에는 이미 자체 알파 채널 (투명도)이 있습니다. 여기에 내가 노력하고있어의 시각화입니다 :

Operation

(원래 여기 가시성에 대한 바둑판에 표시되는 결과가 있지만, 내 말은 실제 투명도)

내가 대각선 그라데이션을 생성하는 방법을 이해 생각 (barycentric gradient 명령은이 작업에 매우 유용합니다). 그러나 이것은 색 채널에 그라디언트를 만듭니다. 즉, 회색 또는 회색조 그라디언트입니다. 반면에 알파 채널에 그라디언트를 적용하고 싶습니다.

IM manual에서 나는 -compose CopyOpacity 연산자를 사용할 수 있음을 이해합니다. 그러나 이것은 마스크에서 내 이미지를 복사하는 것 같습니다. 내 기존 알파 채널에이 그라디언트 색상을 적용해야하므로 기본적으로 그라데이션 이미지의 회색 음영으로 을 곱한 이미지의 알파 채널이 필요합니다.

위에 표시된 작업을 수행하기위한 올바른 IM 명령 줄은 무엇입니까?

답변

1

여기 당신이 그것을 할 수있는 한 방법입니다 :

convert tree.png -write MPR:orig -alpha extract \ 
    \(+clone -colorspace gray -fx "1-j/h" \)  \ 
    -compose multiply -composite -write alpha.png \ 
    MPR:orig +swap -compose copyopacity -composite result.png 

enter image description here

enter image description here

-write alpha.png 생략 할 수 - 그냥 디버깅 및 그림을 위해 알파 층을 보여줍니다.

MPR은 알파 채널로 돌아 다니며 끝까지 가져 오는 동안 메모리에 보유하고있는 원본 이미지의 임시 복사본 일뿐입니다. 알파 채널의 그래디언트는 -fx에 의해 생성되며 색상 공간을 먼저 회색으로 변경하여 3 번 대신 1 번만 실행하면됩니다.당신은 앞까지 트리 이미지의 크기를 알았다면

, 당신은 괄호의 일부를 대체 할 수있는 :

-size WxH gradient:black-white 

그러나 나는 정면의 크기를 모르는 나는 두 번째를 원하지 않는다 convert 명령을 사용하면 원본 이미지의 알파 채널을 복제하여 올바른 크기의 캔바스를 얻고 -fx으로 채 웁니다.

+1

감사합니다.'MPR :'과'-fx' 사용법은 저에게 새로운 것입니다! 귀하의 솔루션에서 영감을 얻은 저는 이제 이렇게하고 있습니다 :'convert tree.png \ (+ clone-alpha extract \ (+ clone -fx "1- (i + j * w/h)/(2 * w)" \ (i + j * w/h)/(2 * w) "'가 대각선 그라디언트를 생성하는 곳에서 -composite \) -compose CopyOpacity -composite result.png' – RocketNuts

관련 문제