Sto cercando di ridimensionare alcune immagini di lucidi in PHP con GD, e ogni volta che faccio, c'è uno strano bordo nero che viene aggiunto intorno ad esso.PHP GD ridimensionamento dell'immagine trasparente con bordo nero
Prima
Dopo
Codice
<?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);
?>
Sembra che se cambio il codice per le nuove dimensioni per essere lo stesso del vecchio (rimuovendo - 1
), nessun bordo nero appare. Quindi il ridimensionamento sta causando il problema.
Qualcuno ha un'idea di cosa potrebbe essere sbagliato?
Edit: Ho appena realizzato succede solo con imagecopyresampled
e non imagecopyresized
. Tuttavia, imagecopyresampled
offre un effetto visivo molto migliore e mi piacerebbe farlo funzionare se possibile.
Sembra che l'anti-aliasing usi il nero per un colore opaco. – Brad
@Brad davvero lo fa. Tuttavia, la pagina della documentazione dice che l'anti-aliasing è disattivato per impostazione predefinita e che viene fornito solo con la versione in bundle di GD, che non sto utilizzando. Forse alcune altre funzioni lo stanno causando ma non vedo nessun altro parametro per quanto posso dire ... –
Ho appena realizzato che succede solo con ['imagecopyresampled'] (http://php.net/manual/en /function.imagecopyresampled.php) e non ['imagecopyresized'] (http://php.net/manual/en/function.imagecopyresized.php). Tuttavia, 'imagecopyresampled' offre un effetto visivo molto migliore e mi piacerebbe farlo funzionare se possibile. –