PHP中的透明圆角

时间:2010-11-15 22:12:08

标签: php png transparent rounded-corners

是否可以使用PHP为图像创建透明边角?我认为这是可能的,但是我缺少一个在复制图像时会保留alpha值的函数。

我的想法是创建一个宽度和高度相同的图像,然后应用透明角落,但是我需要保留alpha通道,只需复制该蒙版上的图像,保持透明仍然透明,但颜色更改为复制图像(反之亦然,将面具放在图像上。)

是否有可能做到这一点,如果有的话,那是什么命令?

更新:感谢您提供帮助。这是一段时间以前,我忘记了,但如果有人通过这个问题找到解决方案,请访问这个:http://www.pc-siete.g6.cz/galery.html。我制作了渐变,径向渐变和圆角的功能,所以随意使用:)。我并不是真的在我的网站上使用它,但让它们做好准备是件好事。

出于某种原因,下载的文件只包含广告。现在它存储在zip中并正确下载。

4 个答案:

答案 0 :(得分:2)

据我所知,没有内置功能可以做到这一点。但是你可以自己创建一个:

function imageapplyroundedcorners(&$img,$radius) {
    // for each corner
        // loop through pixels between corner and (corner +- radius)
            // if distance between pixel and radius > radius, make transparent
            // elseif distance > radius-1 make partially transparent (for antialiasing)
}

答案 1 :(得分:1)

我刚刚在PHP中使用ImageMagick创建了这个函数,它正是我想要的。您需要设置TEMP_DIR常量并在执行路径上使用convert可执行文件。

function png_corners($image, $r = 12)
{
    //Dump out the image as a PNG file.
    $tmp_file = tempnam(TEMP_DIR, "image") . ".png";
    imagepng($image, $tmp_file);

    //Final image file.
    $tmp_out_file = tempnam(TEMP_DIR, "out") . ".png";

    $x = imagesx($image);
    $y = imagesy($image);

    $cmd = "convert -size {$x}x{$y} xc:none -fill white -draw 'roundRectangle 0,0, {$x} ,{$y}, {$r}, {$r}' {$tmp_file} -compose SrcIn -composite {$tmp_out_file}";
    exec($cmd);

    header("Content-Type: image/png");
    $contents = file_get_contents($tmp_out_file);
    echo $contents;
    exit;
}

答案 2 :(得分:1)

不是试图重新发明轮子,而是使用PHP thumbnailer,这将为你创造一切:

require 'Thumbnailer.php';

$th=new Thumbnailer("photo.jpg");
$th->thumbFixed(120,90)->round()->save("thumb.jpg");

答案 3 :(得分:-1)

请参阅ImageMagick reference。是的,您描述的所有内容都是可能的,所有工具都在那里。