2013-05-12 2 views
0

Я сделал все, что мог, попытаюсь исправить это. Я потратил более часа на изучение и тестирование кода, но ничего не помогло.Фон получается черным

Этот код выполняет следующие действия.

  • Возьмите две совершенно-белые изображения и повторно окрашивать их (при сохранении прозрачности)
  • Объединить два изображения вместе
  • Выходы изображений (но с черным фоном !!)

Может кто-то помочь идентифицировать и исправить часть, вызывающую черный фон? См. Следующий URL-адрес для примера сценария.

  • http://labs.bluefiremedia.net/metro-machine/gd/download-png.php?size=128&padding=29&icon=icons/Application/Add-New.png&bgShape=CircleBG.png&bgColorR=255&bgColorG=0&bgColorB=0&iconColorR=255&iconColorG=255&iconColorB=255

    $final_image = imagecreatetruecolor($dimensions, $dimensions); 
    imagesavealpha($final_image, true); 
    
    if($bgShape != '') { 
    list($originalWidth, $originalHeight) = getimagesize('../images/' . $bgShape); 
    
    $background = imagecreatefrompng('../images/' . $bgShape); 
    
    imagefilter($background, IMG_FILTER_BRIGHTNESS, -255); 
    imagefilter($background, IMG_FILTER_COLORIZE, $bgColorR, $bgColorG, $bgColorB); 
    
    $backgroundImage = imagecreatetruecolor($dimensions, $dimensions); 
    imagealphablending($backgroundImage , false); 
    imagesavealpha($backgroundImage , true); 
    
    imagecopyresampled($backgroundImage, 
        $background, 
        0, 0, 
        0, 0, 
        $dimensions, $dimensions, 
        $originalWidth, $originalHeight 
    ); 
    
    imagecopy($final_image, $backgroundImage, 0, 0, 0, 0, $dimensions, $dimensions); 
    
    /// 
    
    $icon = imagecreatefrompng("../" . $icon); 
    
    imagefilter($icon, IMG_FILTER_BRIGHTNESS, -255); 
    imagefilter($icon, IMG_FILTER_COLORIZE, $iconColorR, $iconColorG, $iconColorB); 
    
    $iconImage = imagecreatetruecolor($dimensions, $dimensions); 
    imagealphablending($iconImage , false); 
    imagesavealpha($iconImage , true); 
    
    imagecopyresampled($iconImage, 
        $icon, 
        0, 0, 
        0, 0, 
        $dimensions, $dimensions, 
        $originalWidth, $originalHeight 
    ); 
    
    imagecopy($final_image, $iconImage, 0, 0, 0, 0, $dimensions, $dimensions); 
    
    /// 
    
    imagealphablending($final_image, true); 
    imagesavealpha($final_image, true); 
    
    imagepng($final_image, NULL, 0, PNG_NO_FILTER); 
    
    header("Content-type: image/png"); 
    imagedestroy($backgroundImage); 
    

ответ

2

Набор imagealphablending к ложным, заполнить изображение с прозрачным цветом, установите imagealphablending истина, а затем сделать ваше копирование материала.

$final_image = imagecreatetruecolor($dimensions, $dimensions); 
imagealphablending($final_image, false); 
$transparency = imagecolorallocatealpha($final_image, 0, 0, 0, 127); 
imagefilledrectangle($final_image, 0, 0, $dimensions, $dimensions, $transparency); 
imagesavealpha($final_image, true); 
imagealphablending($final_image, true); 

// rest of the code 
Смежные вопросы