2011-02-15 2 views
6

MVC3/WebMatrix 릴리스의 WebImage 사용. 파일 경로에서 다음 이미지를로드 - 또는 -WebImage.Resize가 PNG 투명도를 제거하는 이유

Sample Image 이에 대해 다음 코드를 실행 enter image description here

:

return new WebImage(path) 
     .Resize(120, 265) 
     .GetBytes("Png"); 

결과 투명도와 이미지에서 밖으로 제거와 블랙 대신에 사용 :

Blacked out transparency

동일 RotateRight(), 로타으로 일어나는 teLeft()와 FlipHorizantal() 나는 .Resize() 메서드를 호출하지 않습니다하지만 경우 :

return new WebImage(path) 
     .GetBytes("Png"); 

이미지가 문제없이 반환됩니다.

+0

웹 이미지 부분은 무엇입니까? – Craigt

+0

System.Web.WebImage는 MVC3 및/또는 WebMatrix의 일부로 제공됩니다. –

+1

실제 이미지에 대한 링크를 게시 할 수 있습니까? SO가 사용하는 이미지 서비스는 불행하게도 다시 압축하기 때문에 특정 이미지에 특별한 것이 있으면 볼 수 없습니다. –

답변

2

이미지가 8 비트 (색인 색)입니까? 8 비트 이미지의 크기를 조정하면 결과가 더 매끄럽게 보이도록 인덱스 색에서 RGB로 변환되는 경우가 많습니다. 색상 표를 변경하지 않고 이미지 크기를 조정하면 거의 종료되지 않습니다.

이미지가 이미 RGB (24 비트 이상) 인 경우 좀 더 복잡합니다. 이미지의 가장자리, 즉 "투명"과 "투명하지 않은"경계에서 리사이 저는 어떻게해야합니까? 많은 크기 조정 알고리즘은 국경에서 "두 가지 색상의 평균화"와 비슷한 것을 수행 할 것입니다 (다시 말하면 이미지가 부드럽게 보이도록 만듭니다). 그러나 대부분의 경우 투명도에 대한 개념이 없으므로 PNG의 여러 레벨의 투명도는 그대로입니다.

따라서 짧은 답변은 "아마도 버그"입니다. PNG의 기능을 완전히 구현하지는 않았습니다.

이 솔루션은 존재하지 않을 수 있습니다,하지만 난 시도 것 :

  1. 8 비트 컬러 스테이가이 옵션 인 경우, 또는 32 비트에 시간을 미리 변환합니다.
  2. 투명 색상의 색상 또는 색상 색인을 가져옵니다. 크기를 조정 한 후에는 값을 투명하게 만듭니다. 앞서 언급 한 "평활화"로 인해 투명과 불투명 사이의 가장자리는 그 색상이 아닐 수 있으며 실제로는 원하는 색상과 검정색이 혼합 된 것처럼 보일 것입니다.
  3. 다른 방법이 없다면 더 많은 제어를 제공하는 외부 라이브러리를 사용해야 할 수도 있습니다.
+0

WPF/System.Windows.Imaging.Media에서 실행할 수 있다는 것을 알고 있으므로 이번에는 큰 총으로 되돌릴 수 있습니다. –

0

GetBytes() 대신 Write() 메서드를 사용하려고 했습니까?

+0

'Write()'는 안타깝게도 장면 아래에서'GetBytes()'를 호출합니다. –

관련 문제