CSS - 透明的bg图像无法在网站上呈现

时间:2013-04-18 01:58:43

标签: php css

我正在尝试重新设计我的网站,以便我原始的正方形,基于图块的图像渲染可以更像是图像的剪切......以摆脱网格图案。

以下是它最初的样子......

enter image description here

这是我想要的粗略模型:

enter image description here

所以我重新保存了一个透明背景的图片缩略图...我只想让狗展示,而正方形是透明的,这将显示网站的背景。

enter image description here

然而,当我在页面上呈现它时,它具有这种黑色背景。

enter image description here

我已经检查了我的CSS,看看是否有某种img类,或渲染漫画的类...甚至引导程序,看看哪里可能有背景颜色分配给黑色(还有搜索十六进制代码000000),但没找到一个...

你知道为什么会这样吗?

谢谢!


编辑:我刚注意到一些事情......

我顶部的徽标呈现透明背景......元素是png文件...因此,其MIME类型为image / png。

我正在使用缩略图脚本缩小缩略图,但现在该元素是thumber.php,它将其设置为MIME类型image / jpeg。

enter image description here

所以我猜这是我的缩略图脚本改变了MIME类型。

所以我检查了它,它正在创建一个jpeg文件

//imagejpeg outputs the image
imagejpeg($img);

有没有办法改变它,以便重新采样的图像输出为png?


缩略图脚本:

    <?php
#Appreciation goes to digifuzz (http://www.digifuzz.net) for help on this

$image_file = $_GET['img']; //takes in full path of image
$MAX_WIDTH = $_GET['mw'];
$MAX_HEIGHT = $_GET['mh'];
global $img;

//Check for image
if(!$image_file || $image_file == "") { 
    die("NO FILE."); 
}

//If no max width, set one
if(!$MAX_WIDTH || $MAX_WIDTH == "") { 
    $MAX_WIDTH="100"; 
}

//if no max height, set one
if(!$MAX_HEIGHT || $MAX_HEIGHT == "") { 
    $MAX_HEIGHT = "100"; 
}

$img = null;
//create image file from 'img' parameter string
$img = imagecreatefrompng($image_file);

//if image successfully loaded...
if($img) {
    //get image size and scale ratio
    $width = imagesx($img);
    $height = imagesy($img);

    //takes min value of these two
    $scale = min($MAX_WIDTH/$width, $MAX_HEIGHT/$height);

    //if desired new image size is less than original, output new image
    if($scale < 1) {
        $new_width = floor($scale * $width);

        $new_height = floor($scale * $height);


        $tmp_img = imagecreatetruecolor($new_width, $new_height);

        //copy and resize old image to new image
        imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

        imagedestroy($img);

        //replace actual image with new image
        $img = $tmp_img;
    }
}
//set the content type header
header("Content-type: image/png");

//imagejpeg outputs the image
imagealphablending($img, false);
imagesavealpha($img, true);
imagepng($img);

imagedestroy($img);

?>

1 个答案:

答案 0 :(得分:3)

您需要在图像生成器中进行一些更改,看看是否适合您。 关键的变化是在标题和图像生成方法的设置范围内。您将寻找以下两个

header('Content-Type: image/jpeg');

更改为:

header('Content-Type: image/png');

imagejpeg($im);

更改为:

imagepng($im)

使用Alpha通道处理png图像时,您应该采取一些额外的步骤。 在用imagepng()吐出之前,需要添加这些行。

imagealphablending($img, false);
imagesavealpha($img, true);

此信息可在php.net

上找到

修改 尝试对此代码进行以下更改:

 if($scale < 1) {
        $new_width = floor($scale * $width);

        $new_height = floor($scale * $height);


        $tmp_img = imagecreatetruecolor($new_width, $new_height);


        imagealphablending($tmp_img,true); // add this line

        //copy and resize old image to new image
        imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

        $img = $tmp_img;

        // remove line here
    }
}

header("Content-type: image/png");
imagesavealpha($img, true);
imagepng($img);
imagedestroy($img);
imagedestroy($tmp_img); // add this line here

基本上,您可以创建新图层并将它们放在一起。对于每个图层,您需要设置Alpha混合。我成功地创建了alpha图像。让我知道你的发现是什么.. :-) ..