Сохранение прозрачности PNG при изменении размера на черном фоне - PullRequest
0 голосов
/ 18 октября 2011

У меня есть небольшой класс, который обрабатывает манипуляции с изображениями.

Я использую следующие для изменения размера изображения

$this->image = imagecreatefrompng($filename);
....
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
...
$this->image = $new_image; 
imagepng($this->image,$filename)) { return true; }

Но измененное изображение не сохраняет прозрачность, вместо этого приходит черный, как я могу сохранить прозрачность.

Обновление

После использования кода @ Мануэля черная часть уменьшилась, но черный фон все еще присутствует. Исходное изображение и полученное изображение

Source & Sub соответствующий

основной http://www.freeimagehosting.net/newuploads/820a0.png суб http://www.freeimagehosting.net/newuploads/30526.png

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

В последнем комментарии, опубликованном 8 мая на странице руководства для imagecopyresampled, рассказывается, как это сделать.

imagecolortransparent($new_image, imagecolorallocatealpha($new_image, 0, 0, 0, 127));
imagealphablending($new_image, false);
imagesavealpha($new_image, true);

Поставьте это сразу после создания$new_image.

1 голос
/ 18 октября 2011

добавить это до imagecopyresampled(...)

// preserve transparency
imagecolortransparent($new_image , imagecolorallocatealpha($new_image , 0, 0, 0, 127));
imagealphablending($new_image , false);
imagesavealpha($new_image , true);
...