Изменение размера изображений .PNG с помощью переполнения стека

Я загружаю изображение с MIME типа PNG, и все хорошо, файл имеет прозрачный фон

но начать мне нужно изменить размер для этого файла, как это

/home/ivan/host/olegroom/app/../web/uploads/photo/20161216022845_png-001.png

/**
* @param string $width
*/
public function resizeToWidth($width)
{
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width, $height);
}

/**
* @param string $width
* @param string $height
* @param int $left
* @param int $top
*/
public function resize($width, $height, $left = 0, $top = 0)
{
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, $left, $top, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}

а потом я сохраняю свой файл

/**
* @param string $filename
* @param int $image_type
* @param int $compression
* @param null $permissions
*/
public function save($filename, $image_type = IMAGETYPE_JPEG, $compression = 95, $permissions = null)
{
if ($image_type == IMAGETYPE_JPEG) {
imagejpeg($this->image, $filename, $compression);
} elseif ($image_type == IMAGETYPE_GIF) {
imagegif($this->image, $filename);
} elseif ($image_type == IMAGETYPE_PNG) {
imagepng($this->image, $filename);
}
if ($permissions != null) {
chmod($filename, $permissions);
}
}

и после изменения размера у меня есть черный фон, но мне это не нужно, как изменить размер для png mimetype ??

1

Решение

Вы должны отключить альфа-смешивание и сохранить исходные данные альфа-канала. Сделайте это после imagecopyresampled() вызов:

imagealphablending($new_image, false);
imagesavealpha($new_image, true);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]