2013-04-26 2 views
1

사용자 업로드 로고를 배경 이미지에 표시해야합니다. 로고의 배경은 투명해야합니다.Photoshop의 어두운 색상 혼합 모드를 사용하여 이미지를 혼합하는 방법은 무엇입니까?

대부분의 사용자는 알파 투명도를 사용하는 방법뿐만 아니라 이미지를 투명하게 만드는 방법에 대한 지식이 없기 때문에 업로드되는 대부분의 로고는 흰색의 배경이입니다.

Photoshop에서는 레이어의 블렌드 모드로 '어두운 색상'을 선택하면 Photoshop에서 이러한 로고를 배경으로 표시 할 수 있습니다.

나는 PHP에서 동일한 것을 달성하려고 노력하고 있으므로 Photoshop없이이 작업을 할 수 있습니다.

아이디어가 있으십니까?

답변

0

이 기능은 사용자의 필요에 맞게 보입니다.

http://www.php.net/manual/en/function.imagecolortransparent.php

그렇지 않으면 당신은 아마 아래의 픽셀을 비교하고 결과 이미지에 대한 하나의 어두운을 선택하는 모든 픽셀을 반복해야 할 것이다.

+0

아래 픽셀은 무엇입니까? php는 웹 페이지의 컨텍스트에서 이미지를 합성합니다. – Octopus

0

개인적으로 나는 GD 이상의 이미지 매직으로 더 나은 결과를 있었다, 그러나 그것은 모든 플랫폼에서 $im->getImagePixelColor(0, 0)이 함께 작동해야한다 이미지의 왼쪽 상단에서 픽셀의 색상을 얻을 수 있음을 http://php.net/manual/en/imagick.painttransparentimage.php

// Loads image 
    $im = new Imagick($source); 

    // Apply fuzz 
    $im->paintTransparentImage($im->getImagePixelColor(0, 0), 0, $fuzz); 

    // Writes image 
    $im->setImageFormat('png'); 
    $im->writeImage($target); 
    $im->destroy(); 

참고 사용할 수 없습니다 어떤 색깔 BG든지 조정하십시오 $fuzz 로고가 깃털을 이루는 방법에 따라서, 모든 직선 및 단색 인 경우에 그것을 낮게 유지하십시오

또한 http://www.php.net/manual/en/imagick.trimimage.php는 심상에있는 빈 공간을 제거하기를 위해 아주 유용하다.

0

두 가지 가능한 해결책을 생각해 볼 수 있습니다.

하나는 자바 스크립트를 사용하여 클라이언트 수준에서 픽셀 혼합을 사용하는 것입니다. 이것은 약간의 프로세서가 무거울 수 있으므로 특히 휴대 전화 및 기타 기기의 경우 가장 좋은 해결책은 아닙니다 경량 기기 기기. pixastic이라는 라이브러리가있어 일부 Photoshop과 유사한 블렌드 모드를 사용할 수 있습니다.

다른 해결책은 업로드 된 이미지를 PHP로 처리하고 배경색을 바꾸어 투명도가있는 로고를 다시 만드는 것입니다. 이 경우 배경색이 무엇인지 알아야합니다. 그리고 로고에 같은 색을 사용한다면 어떨까요? 당신도 투명하게 만들고 싶지 않을 것입니다. (가족에서 다른 사람의 사이에서) 다음과 같은 PHP 함수에서

봐는 :

imagealphablending 
imagecolortransparent 

개인적으로, 나는 이미지를 처리하고 필요한 곳 ​​재사용 할 수있는 영구적 인 파일을 만드는 PHP 방법을 선호한다. 하지만 더 나은 아직 나는 단지 일반 사용자가 로고를 만드는 데 의존하지 않을 것이다.

사용자가 실제로 이러한 종류의 파일을 작성하게하려면 Visual Studio 아이콘 편집기와 같은 투명 영역을 지정할 수있는 웹 기반 도구를 거의 만들어야합니다.

0

나는 PS의 내부에 관해서는 잘 모르겠지만, 내 자신의 구현 (안 PHP에서, 마음 당신은) 나는 다음과 같은 방법으로 작업 접근 : 전경과 배경의

  1. 추출 루마을
  2. 전경과 배경 루마를 비교하여 픽셀 마스크를 만듭니다.
  3. 파생 마스크를 기반으로 출력을 할당합니다. 일반적인 의사에서

내 시도 : 물론

Yfg = FG(:,:,1)*0.299 + FG(:,:,2)*0.587 + FG(:,:,3)*0.114; 
Ybg = BG(:,:,1)*0.299 + BG(:,:,2)*0.587 + BG(:,:,3)*0.114; 
mask = (Yfg > Ybg); 
R = BG(mask) + FG(~mask); 

이 각 RGB 채널에 대한 관계형 조화를 않습니다 만하는 "어둠"모드는 다르다.

PHP에서이 작업이 얼마나 번거로운 것인지 잘 모르겠습니다. 나는 PHP보다 이미지 블렌딩에 익숙하다.