2012-03-03 3 views
4

Мне нужна общая загрузка изображений для сайта PHP. Фотографии и логотипы должны быть изменены до определенной степени, чтобы удостовериться, что они не слишком большие и соответствуют дизайну.PHP-GD: сохранить полупрозрачные области

Я пытаюсь его с этим кодом:

function resize($width,$height) { 
    $new_image = imagecreatetruecolor($width, $height); 

    if($this->image_type == PNG or $this->image_type == GIF) { 
     imagealphablending($new_image, false); 
     imagesavealpha($new_image,true); 
     $transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127); 
     imagefilledrectangle($new_image, 0, 0, $nWidth, $nHeight, $transparent); 
    } 

    imagecopyresized($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
    $this->image = $new_image; 
} 

Однако, когда я загрузить изображение, которое имеет участки с альфа-значениями от 0 до 255, они заменяются на полный черный, поворачиваясь анти- сглаженные области на черную границу.

Полная прозрачность работает отлично для PNG и GIF, только полупрозрачные области являются проблемой.

Прошу прощения, если я не использую правильные термины, чтобы объяснить свою проблему, возможно, поэтому я почти ничего не нашел на ней.

+0

См. Http://stackoverflow.com/questions/8443699/how-to-draw-semi-transparent-rectangle-in-php –

+1

не может воспроизвести, проблема, вероятно, в другом месте, например, если изображение PNG, Используется 'imagecreatefrompng'? вы можете заменить 'imagefilledrectangle' на' imagefill' и 'imagecopyresized' на' imagecopyresampled', также хорошо, если вы добавите 'imagealphablending ($ this-> image, true);' ... –

ответ

1

Try:

function resize($width,$height) { 
    $new_image = imagecreatetruecolor($width, $height); 

    if($this->image_type == PNG or $this->image_type == GIF) { 
     imagefill($new_image, 0, 0, IMG_COLOR_TRANSPARENT); 
     imagesavealpha($new_image,true); 
     imagealphablending($new_image, true); 
    } 

    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
    $this->image = $new_image; 
} 

на основе this (который я знаю, он работает).

+0

спасибо, мне нужно ТОЧНО это. ОБНОВЛЕНО :) –

Смежные вопросы