문제

GD를 사용하여 이미지를 크기를 조정하고 변환하지만 테스트 중에 투명한 PNG를 JPEG로 변환 할 때 이상한 동작을 발견했습니다. 매뉴얼에 따르면 상상력()는 기본적으로 켜져 있지만 투명성을 보존하기 위해서는 ImagesAvealpha() true (true) (결국 ImageAlphablending ()를 거짓으로 설정해야합니다). 따라서 올바른 방법은 다음과 같습니다.

$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, false);
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);

그러나 내가 그렇게한다면 "올바른"방법은 모든 투명도 영역이 JPEG에서 검은 색으로 나타납니다. 이것은 내 테스트에서 작동하는 것 같습니다 (투명 영역에 대한 흰색 배경이있는 JPEG).

$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, true); // true by default, but still...
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);

누군가이 주제에 대해 나를 깨달을 수 있습니까?

도움이 되었습니까?

해결책

아마도 당신의 PNG에 따라 다릅니다. PNG 파일에는 투명성이 작동하지 않을 때 사용할 수있는 배경색이 포함될 수 있습니다. 당신의 PNG에는 아마도 흰색 배경이있을 것입니다. ImageAplhablending을 True로 설정하면 PNG에서 배경색을 선택하고 JPEG를 작성할 때 사용합니다. False로 설정하면 검은 색의 기본값을 선택합니다.

직접 시도해 볼 수 있습니다. 투명한 PNG를 만들고 주황색 또는 분홍색 배경으로 저장하십시오. 두 번째 예제는 그 색상을 보여 주어야합니다.

그건 그렇고, PNG 배경색 트릭은 IE6 이미지에 좋은 것입니다. IE6은 투명한 PNG를 지원하지 않으므로 저장 한 배경색으로 표시됩니다. 투명한 PNG를 저장할 때 웹 사이트와 동일한 배경색으로 저장하십시오. IE6의 PNG 이미지 주변의 흰색 또는 블랙 박스보다 더 좋아 보입니다.

다른 팁

PNG (또는 GIF)에서 JPG로 변환하는 경우 최종 이미지를 흰색으로 채워진 다른 이미지로 복사해야합니다. imagecopy ($image GD로 이미 생성 된 이미지) :

// Create a new background
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));

// Allocate the color
$color = imagecolorallocate($bg, 255, 255, 255);

// Fill the background with white
imagefill($bg, 0, 0, $color);

// Alpha blending must be enabled on the background!
imagealphablending($bg, TRUE);

// Copy the current image onto the opaque background
if (imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)))
{
    // Replace the image with the background copy
    imagedestroy($image);
    $image = $bg;
}

도움이되기를 바랍니다.

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