【问题标题】:PHP image creation - problems with opacityPHP图像创建 - 不透明度问题
【发布时间】:2015-10-08 09:16:33
【问题描述】:

我需要有关正确设置不透明度的帮助。基本上,我有一个带有特定用户定义颜色的横幅(一个矩形)。除此之外,我想插入一个标志的 png 图像,它是圆形的并且具有透明背景。

但是,当我叠加它们时,它们仍然会在应该透明的地方显示白色背景。我尝试保存 alpha 并在 stackoverflow 上经历了几个线程,但没有任何效果......

这是我的代码:

$width = 800;
$height = 150;

$png_image = imagecreate($width, $height);
imagealphablending( $png_image, true );
imagesavealpha( $png_image, true );
$bg = imagecolorallocate($png_image, hex2rgb($color_schemes[$design]['900'])[0], hex2rgb($color_schemes[$design]['900'])[1], hex2rgb($color_schemes[$design]['900'])[2]);

$icon1 = imagecreatefrompng('../../imgs/flags/big/us.png');
imagealphablending( $icon1, true );
imagesavealpha( $icon1, true );
imagecopy($png_image, $icon1, 10, 10, 0, 0, 80, 80);

图片中还有一些其他的东西,但这与这个问题无关。上面的结果是这样的: http://www.meteotemplate.com/template/plugins/banner/bannerCreate.php

即使PNG图像在旗帜周围是透明的,您也可以看到旗帜被白色背景包围......

【问题讨论】:

  • this thread 中的任何答案对您有帮助吗?
  • 能否附上相关徽标图片的链接?

标签: php html transparency


【解决方案1】:

使用imagecreatetruecolor() 而不是imagecreate()

虽然 php 文档对此不清楚,但imagecreatetruecolor() 创建了一个 RGBA 图像,这是具有 alpha 透明度所必需的。

PHP 文档 http://php.net/manual/en/function.imagecreatetruecolor.php

注意

颜色索引是 32 位 ARGB,如果出于某种原因您决定直接创建它们而不是分配它们。这其实挺方便的。

奖励:ARGB 颜色函数

// return 32bit ARGB color index
// input red (0-255), green (0-255), blue(0-255), alpha (0-127)
function makeColor($r=0, $g=0, $b=0, $a=0) {
   return ($a << 24) + ($r << 16) + ($g << 8) + $b;
}

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 2010-11-09
    • 2011-09-08
    • 1970-01-01
    • 2011-04-14
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多