Estoy tratando de reducir el tamaño de algunas imágenes transparentes en PHP con GD, y cada vez que lo hago, hay un extraño borde negro que se agrega alrededor de él.PHP GD cambio de tamaño de imagen transparente dando borde negro
Antes
Después
Código
<?php
$image = imagecreatefromstring(file_get_contents('logo.png'));
$width = imagesx($image);
$height = imagesy($image);
$newWidth = $width - 1;
$newHeight = $height - 1;
$output = imagecreatetruecolor($newWidth, $newHeight);
imagecolortransparent($output, imagecolorallocatealpha($output, 0, 0, 0, 127));
imagealphablending($output, false);
imagesavealpha($output, true);
imagecopyresampled($output, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
header('Content-Type: image/png');
imagepng($output);
?>
Parece que si cambio el código para las nuevas dimensiones a ser el mismo que el viejo (eliminar - 1
), no aparecen bordes negros. Entonces, el cambio de tamaño está causando el problema.
¿Alguien tiene una idea de lo que podría estar mal?
Edición: Me acabo de dar cuenta de que solo ocurre con imagecopyresampled
y no con imagecopyresized
. Sin embargo, imagecopyresampled
da un mejor efecto visual y me gustaría que funcione si es posible.
Parece que el suavizado está utilizando negro para un color mate. – Brad
@Brad de hecho lo hace. Sin embargo, la página de documentación dice que el anti-aliasing está desactivado por defecto, y que solo viene con la versión incluida de GD, que no estoy usando. Tal vez alguna otra función lo está causando, pero no veo ningún otro parámetro por lo que puedo decir ... –
Me acabo de dar cuenta de que solo sucede con ['imagecopyresampled'] (http://php.net/manual/en /function.imagecopyresampled.php) y no ['imagecopyresized'] (http://php.net/manual/en/function.imagecopyresized.php). Sin embargo, 'imagecopyresampled' da un mejor efecto visual y me gustaría hacer que funcione si es posible. –