PHP-GD: сохранить полупрозрачные области - PullRequest
4 голосов
/ 03 марта 2012

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

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

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, только полупрозрачные области являются проблемой.

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

1 Ответ

1 голос
/ 03 апреля 2012

Попробуйте:

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;
}

На основе это (что, я знаю, работает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...