PHP: Как сделать часть png-файла прозрачной?

У меня есть файл png, и я хочу, чтобы часть этого изображения (прямоугольник) была прозрачной.

например что-то вроде этого:

псевдокод:

<?php
$path = 'c:\img.png';
set_image_area_transparent($path, $x, $y, $width, $height);
?>

где x, y, $width, $height определяют прямоугольник на изображении, который должен быть прозрачным.

Возможно ли использование некоторых библиотек в PHP?


person tomas.teicher    schedule 12.03.2013    source источник


Ответы (2)


Во-первых, вам нужно установить альфа-каналы для вашего изображения: http://www.php.net/manual/en/function.imagealphablending.php http://www.php.net/manual/en/function.imagesavealpha.php

Во-вторых, вам необходимо установить прозрачный цвет для всех пикселей в прозрачной области: http://www.php.net/manual/en/function.imagecolorset.php

person Andrej Bestuzhev    schedule 12.03.2013

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

<?php
// Create a 55x30 image
$im = imagecreatetruecolor(55, 30);
$red = imagecolorallocate($im, 255, 0, 0);
$black = imagecolorallocate($im, 0, 0, 0);

// Make the background transparent
imagecolortransparent($im, $black);

// Draw a red rectangle
imagefilledrectangle($im, 4, 4, 50, 25, $red);

// Save the image
imagepng($im, './imagecolortransparent.png');
imagedestroy($im);
?>

В вашем случае вы должны взять существующее изображение с соответствующей функцией. результирующий ресурс будет $im в приведенном выше примере, затем вы должны выделить цвет, установить его прозрачным и нарисовать прямоугольник, как указано выше, а затем сохранить изображение:

<?php
// get the image form the filesystem
$im = imagecreatefromjpeg($imgname);
// let's assume there is no red in the image, so lets take that one
$red = imagecolorallocate($im, 255, 0, 0);

// Make the red color transparent
imagecolortransparent($im, $red);

// Draw a red rectangle in the image
imagefilledrectangle($im, 4, 4, 50, 25, $red);

// Save the image
imagepng($im, './imagecolortransparent.png');
imagedestroy($im);
?>
person uncovery    schedule 12.03.2013