Начиная с последних двух дней, я пытался добавить трансверсальность к фону после поворота изображения с помощью функции imagerotate () PHP-GD.
Но, к моему большому разочарованию, это совсем не работает.
Это просто выделяет черный фон за ним.
Вот мой код –
$ patchImageS = 'image.png'; // изображение, которое должно быть исправлено по окончательному bg $ patchImage = imagecreatefrompng ($ patchImageS); // ресурс изображения для исправления $ patchImage = imagerotate ($ patchImage, 23, 0, 0); imagepng ($ patchImage, 'tt.png');
Я попытался изменить передаваемые параметры в функции
imagerotate ($ patchImage, 23, 5, 0);
imagerotate ($ patchImage, 23, 0, 5);
Любая помощь будет высоко оценен.
После того, как число 99% готовых ответов, вот решение, которое я нашел:
// Create, or create from image, a PNG canvas $png = imagecreatetruecolor($width, $height); // Preserve transparency imagesavealpha($png , true); $pngTransparency = imagecolorallocatealpha($png , 0, 0, 0, 127); imagefill($png , 0, 0, $pngTransparency); // Rotate the canvas including the required transparent "color" $png = imagerotate($png, $rotationAmount, $pngTransparency); // Set your appropriate header header('Content-Type: image/png'); // Render canvas to the browser imagepng($png); // Clean up imagedestroy($png);
Ключевым моментом здесь является включение вашего imagecolorallocatealpha () в ваш вызов imagerotate () …
ищите imagesavealpha () в php-документации – я думаю, что это то, что вы ищете.
EDIT: вот пример:
$png = imagecreatefrompng('./alphachannel_example.png'); // Do required operations $png = imagerotate($png, 23, 0, 0); // Turn off alpha blending and set alpha flag imagealphablending($png, false); imagesavealpha($png, true); // Output image to browser header('Content-Type: image/png'); imagepng($png); imagedestroy($png);