2010-01-22 2 views
5

직사각형 이미지를 직사각형이 아닌 모양으로 잘라 내고 싶습니다. 나는 당신이 완전히 문자 그대로 받아들이면 불가능하다는 것을 알고 있습니다. 내가 끝내고 싶은 것은 투명한 배경에 Y 형으로 자른 이미지 X입니다.프로그래밍 방식으로 이미지를 사각형이 아닌 모양으로 자르는 방법은 무엇입니까?

예를 들어 아이다 호 플래그를 찍어 아이다 호 주 모양으로 자르고 싶다고 가정 해 보겠습니다.

  1. 읽기 아이다의 모양에 대한 불투명 픽셀, 다른 곳 투명 픽셀이있는 이미지를 만들고이 아이다 호 주 이미지
  2. 에 대한 비트 맵의 ​​어떤 종류를 저장 : 나는 이런 식으로 뭔가를 할 것이라고 상상 아이다 호 상태 이미지의 각 불투명 픽셀 위치의 경우, 아이다 호 상태 플래그의 이미지에서 대응하는 픽셀을 복사

1 단계는 분명히 수동으로 수행 될 수 빈, 투명 캔버스에 배치하지만, 나머지는 할 것 프로그래밍 방식으로 나는 내가 일반적으로 올바른 생각을 가지고 있다고 생각하지만 구체적인 방법에 어떻게 접근 할 것인지 모른다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

구현 기술에 관한 한, 저는 PHP 녀석입니다. 그래서 gdLibrary 나 PHP에서 작동하는 것을 사용하는 것이 아마도 제가가는 최선의 방법 일 것입니다.

+0

질문에 php 태그를 추가해야합니다. – wich

답변

2

나는 단순히 비트 마스크 나 알파 채널을 추가하는 것이 훨씬 쉽다고 생각한다. 이 경우 모양의 네거티브 마스크 이미지를 사용한 다음 일반 이미지에 마스크로 적용한 다음 투명한 형식으로 저장하면됩니다. 필자는 실제로 GD 또는 ImageMagick으로이 작업을 수행 한 적이 없지만 Jerry가 제안한대로 사용할 수 있다고 생각합니다. 당신이 원하는대로

$source = IMagick("sourcefile"); 
$mask = IMagick("maskfile"); 
$mask->adaptiveResizeImage($source->getImageWidth(), $source->getImageHeight(), true); 
$source->compositeImage($mask, imagick::COMPOSITE_MULTIPLY, 0, 0); 
$source->writeImage("newfile"); 
$source->clear(); 
$source->destroy(); 

은 SourceFile 원본 이미지이어야합니다 http://about.phalacee.com/geek/creating-mask-layers-using-php-gd

2

이렇게하는 일반적인 방법은 투명하고 불투명 한 대신 윤곽선에 흰색 (모두 1)과 검정색 (모두 0)을 사용하는 것입니다. 그런 다음 그 이미지를 자르려고하는 이미지와 결합시킵니다. 결과는 윤곽선 이미지가 0이고 윤곽선이 1 인 다른 이미지입니다.

또한 윤곽선 이미지를 반전하고 반전 된 버전을 배경 이미지로 반전해야 할 수도 있습니다. 그런 다음 포어 그라운드 이미지로 백그라운드 이미지를 사용하여 Idaho 모양의 전경 이미지 (예제를 사용하기 위해)와 다른 곳의 배경 이미지를 합성합니다.

사용중인 라이브러리의 기능에 따라 직접 사용할 수있는 가능성이 있습니다. 예를 들어 Windows는 MaskBlt 함수에서이 기능을 제공합니다.

1

를 PHP에서 ImageMagick이 아마 당신의 최선의 방법입니다 사용 : Acutally 여기

은 블로그 게시물이 도움이 될 수도 비슷한 SO 질문을 형성입니다 maskfile은 원하는 모양에 대해 알파 채널이 올바르게 설정되어있는 마스크 파일이어야합니다.

관련 문제