PHP의 GDlib imagecopyresampled를 사용할 때 PNG 이미지 투명도를 유지할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/32243

문제

다음 PHP 코드 스 니펫은 GD를 사용하여 브라우저에 업로드 된 PNG의 크기를 128x128로 조정합니다.제 경우에는 원본 이미지의 투명 영역이 단색 검정으로 대체된다는 점을 제외하면 훌륭하게 작동합니다.

imagesavealpha가 설정되어 있지만 뭔가 잘못되었습니다.

리샘플링 된 이미지에서 투명도를 유지하는 가장 좋은 방법은 무엇인가요? 라코 디스

도움이 되었습니까?

해결책

라코 디스

저를 위해 해냈습니다.감사합니다 ceejayoz.

참고 : 대상 이미지에는 소스 이미지가 아닌 알파 설정이 필요합니다.

편집 : 전체 대체 코드.아래 답변과 의견도 참조하십시오.어떤 식 으로든 완벽하다고 보장 할 수는 없지만 당시 제 요구를 충족 시켰습니다. 라코 디스

다른 팁

왜 그렇게 복잡하게 만드나요?다음은 내가 사용하는 것이며 지금까지 나를 위해 일했습니다. 라코 디스

이 방법이 효과가있을 것 같습니다. 라코 디스

수정 : PHP 문서의 누군가가 imagealphablending가 거짓이 아니라 참이어야한다고 주장합니다.YMMV.

일부 사람들에게 도움이 될 수있는 추가 사항 :

이미지를 빌드하는 동안 이미지 알파 블렌딩을 전환 할 수 있습니다.나는 이것이 필요한 특정한 경우에 투명한 배경에 반투명 PNG를 결합하고 싶었습니다.

먼저 imagealphablending을 false로 설정하고 새로 생성 된 트루 컬러 이미지를 투명한 색상으로 채 웁니다.imagealphablending이 true이면 투명 채우기가 검은 색 기본 배경과 병합되어 검은 색이되기 때문에 아무 일도 일어나지 않습니다.

그런 다음 이미지 알파 블렌딩을 true로 전환하고 일부 PNG 이미지를 캔버스에 추가하여 배경의 일부를 표시합니다 (예 : 전체 이미지를 채우지 않음).

결과는 투명한 배경과 여러 결합 된 PNG 이미지가있는 이미지입니다.

copyimageresample를 사용하여 JPEG / GIF / PNG와 같은 이미지 크기를 조정하는 기능을 만들었으며 PNG 이미지는 여전히 투명성을 유지합니다. 라코 디스

이것이 속임수라고 생각합니다. 라코 디스

단점은 이미지에서 100 % 녹색 픽셀이 제거된다는 것입니다.어쨌든 도움이되기를 바랍니다. :)

투명도 유지를 재조정하면 다른 게시물에 명시된 것처럼 yes가 true로 설정되어야하며 알파 플래그를 사용하려면 imagealphablending ()이 false로 설정되어야합니다. 그렇지 않으면 작동하지 않습니다.

또한 귀하의 코드에서 두 가지 사소한 점을 발견했습니다.

  1. getimagesize()의 너비 / 높이를 얻기 위해 imagecopyresmapled()를 호출 할 필요가 없습니다.
  2. 좌표는 $uploadWidth가 아닌 $uploadHeight에서 시작하므로 빈 픽셀에 복사 할 수 있으므로 -10는 값을 1로 지정해야합니다.imagesx($targetImage) - 1imagesy($targetImage) - 1로 대체하면 상대적으로해야합니다. :)

다음은 전체 테스트 코드입니다.저에게 효과적입니다 라코 디스

width 함수로 전달되는 소스 이미지의 heightimagecopyresampled 값에주의하십시오.실제 소스 이미지 크기보다 크면 나머지 이미지 영역이 검정색으로 채워집니다.

나는 ceejayoz와 Cheekysoft의 답변을 결합하여 가장 좋은 결과를 얻었습니다.imagealphablending () 및 imagesavealpha () 없이는 이미지가 명확하지 않습니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top