【问题标题】:Transparent rounded corners in PHPPHP中的透明圆角
【发布时间】:2011-05-10 12:22:03
【问题描述】:

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

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

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

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

由于某种原因,下载的文件中刚刚包含广告。现在它已存储在 zip 中并可以正常下载。

【问题讨论】:

  • 使用imagearc 创建弧。看例子,它是圆的。 :-)
  • 嗯.. 不是我想要的。我不想画圆圈 :D 我需要将一些 omage 的角切割成圆形的,并让背景保持透明;)

标签: php png transparent rounded-corners


【解决方案1】:

请参阅ImageMagick reference。是的,你描述的一切都是可能的,所有的工具都在那里。

【讨论】:

    【解决方案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)
    }
    

    【讨论】:

    • 这实际上可以工作,但它是一种蛮力解决方案..无论如何,如果没有其他问题出现,我会尝试那个;)
    • 我有一个(不幸的)倾向首先使用蛮力解决方案,然后找出简单的方法 XD 所以是的,这会工作(我可能会很快为它编写代码以使用我自己),但很有可能存在更有效的解决方案(但它有抗锯齿吗?)
    • 我怀疑我现在正在查看那里提到的一些 ImageMagick 函数,但所有似乎都是实验性的,没有记录在案,而且人们在使用它们时遇到了麻烦:/ 看起来直到我们有了像样的工具,我们需要去蛮力;)
    【解决方案3】:

    我刚刚使用 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;
    }
    

    【讨论】:

    • 好吧,这个已经很老了,但也许有人在寻找 imagick 的人会找到他需要的东西..
    【解决方案4】:

    不要尝试重新发明轮子,而是使用 PHP thumbnailer,它将为您完成一切:

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

    【讨论】:

    • 1.很久以前回答 2. 如果有人不“重新发明”,实际上只是了解如何做某事,那么当老一代人死去时,就没有人可以进步,那将是真正的重新发明..
    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多