PHP의 GDlib imagecopyresampled를 사용할 때 PNG 이미지 투명도를 유지할 수 있습니까?
-
09-06-2019 - |
문제
다음 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로 설정되어야합니다. 그렇지 않으면 작동하지 않습니다.
또한 귀하의 코드에서 두 가지 사소한 점을 발견했습니다.
-
getimagesize()
의 너비 / 높이를 얻기 위해imagecopyresmapled()
를 호출 할 필요가 없습니다. - 좌표는
$uploadWidth
가 아닌$uploadHeight
에서 시작하므로 빈 픽셀에 복사 할 수 있으므로-1
와0
는 값을1
로 지정해야합니다.imagesx($targetImage) - 1
및imagesy($targetImage) - 1
로 대체하면 상대적으로해야합니다. :)
다음은 전체 테스트 코드입니다.저에게 효과적입니다 라코 디스
width
함수로 전달되는 소스 이미지의 height
및 imagecopyresampled
값에주의하십시오.실제 소스 이미지 크기보다 크면 나머지 이미지 영역이 검정색으로 채워집니다.
나는 ceejayoz와 Cheekysoft의 답변을 결합하여 가장 좋은 결과를 얻었습니다.imagealphablending () 및 imagesavealpha () 없이는 이미지가 명확하지 않습니다. 라코 디스