PHP GD изменение размера прозрачного изображения, дающего черную границу

Я пытаюсь уменьшить некоторые прозрачные изображения на PHP с помощью GD, и всякий раз, когда я это делаю, вокруг него добавляется странная черная граница.

До до

После введите описание изображения здесь

Код

<?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); ?> 

Кажется, что если я изменил код для новых измерений так же, как старый (удаление - 1 ), черные полосы не появятся. Таким образом, изменение размера вызывает проблему.

Кто-нибудь может понять, что может быть неправильным?

Edit: Я просто понял, что это происходит только с imagecopyresampled и не imagecopyresized . Однако imagecopyresampled дает гораздо лучший визуальный эффект, и я хотел бы заставить его работать, если это возможно.

Я думаю, проблема здесь в вашем исходном изображении.

То, что у вас есть, не является истинным цветом PNG с альфа-каналом, а PNG с индексированным цветом с прозрачным цветом. Это видно, если вы открываете изображение в Photoshop:

Изображение как показано в Photoshop

Это изображение было создано с помощью сглаживания уже (что дает желтый текст, который видится здесь на белом фоне), но при его изменении размера подспиксельные вычисления могут немного выходить за пределы их границ.

Я подозреваю, что если вы исправите изображение, сделав его полным RGB с альфа-каналом, у вас не будет этой проблемы.