当前位置: 首页 > 知识库问答 >
问题:

PNG-保持透明度

习高格
2023-03-14

我正试图重新设计我的网站,使我原来的方形、基于瓷砖的图像渲染更像是图像的剪贴画。。。为了摆脱网格模式。

这是它最初的样子。。。

这是我想要的一个粗略的模型:

360-b929-7a3200b63491.jpg" width="100%" height="100%" />

所以我重新保存了一个透明背景的图像缩略图。。。我只想让狗展示,正方形是透明的,可以在下面显示网站的背景。

然而,当我在页面上呈现它时,它的背景是黑色的。

我已经检查了我的CSS,看看是否有某种img类,或用于渲染漫画的类。。。甚至可以通过引导程序来查看可能有背景色被指定为黑色的位置(还搜索了十六进制代码000000),但没有找到一个。。。

然后我发现这与我的缩略图脚本重新采样png的方式有关。。。由于假定透明图像的背景是黑色的,我将其归咎于imagecreatetruecolor(),后者返回一个表示指定大小的黑色图像的图像标识符

我试着按照Cheekysoft关于重新采样后保持透明度的问题来做。。。但它不起作用。。。他的两个要点是:

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

我发现如果我把$img=imagecreatefrompng($image_file) 在我调整大小/重新采样之前,它会透明地显示。。。这就是我想要的。。。但在我重新取样后就不会了。

拇指钉。php代码:

    <?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
if( preg_match('/\.jpg$/',$image_file) || preg_match('/\.jpeg$/',$image_file) ){ 
    $img = imagecreatefromjpeg($image_file); 
} else { 
    $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);

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

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


imagedestroy($img);

?>

有人能帮忙吗?

谢谢


共有2个答案

斜向文
2023-03-14

创建图像后,您将alphablending和traparent代码放置在下方。只需将它们放在createresample行之前,并使用imagecreatefrompng创建的图像创建透明图像。

imagealphablending( $tmp_img, false );
imagesavealpha( $tmp_img, true );
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

或者你可以试着跟着

$img = ImageCreateFromPNG($image_file);
$tmp_img = imagecreatetruecolor($new_width,$new_height);
imagecolortransparent($tmp_img, imagecolorallocate($tmp_img, 0, 0, 0));
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
林弘壮
2023-03-14

在重新采样/调整图像大小之前,需要对目标图像调用imagealphablending()

//copy and resize old image to new image
imagealphablending($tmp_img, false);
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// ...
 类似资料:
  • 我目前正在用LWJGL和Java编程一个游戏。到目前为止,一切都进展顺利,但纹理似乎无法保持其透明度。起初,我以为我在OpenGL中设置了一些错误。然而,当我从使用ImageIO加载的BuffereImage打印出所有字母时。read(),所有字母都是255;这意味着即使我加载的PNG文件中明显有透明度,也没有透明度(我在Paint.NET中检查了透明度,确保我正确保存了图像,并与其他人进行了验证

  • 我有一个包含透明图标(32位,带alpha通道)的。我想做的是将基于图像索引的单个图标保存为PNG文件,同时保留alpha通道的透明度。使用RAD Studio 2010,因此它具有支持,不需要第三方库。图像从PNG“精灵”图像中加载到TImageList中,使用这里的方法——在运行时使用Delphi XE将png图像添加到图像列表中——因此加载时保留透明度。现在我需要单独保存它们,换句话说,从已

  • 问题内容: 嘿,当我从png创建缩略图时,尝试保持png的透明度时遇到麻烦,有人对此有任何经验吗?任何帮助都会很棒,这是我目前正在做的事情: 问题答案: 过去,我已经成功地做到了: 我发现输出图像使用质量更好的比

  • 问题内容: 我正在使用以下代码读取PNG图片: 在显示时,有一个黑色背景,我知道是由PNG透明性引起的。 我找到了建议使用的解决方案,但是我不确定如何将其应用于上面的代码。 问题答案: 创建第二个类型… 将原件涂到副本上… 您现在有了图像的非透明版本… 要保存图像,请看写/保存图像

  • 我试图将png文件复制到程序中的剪贴板,并在粘贴到另一个程序(例如ms office、paint、photoshop)时保持其alpha通道。问题是,在大多数节目中,alpha频道都会变成黑色。我已经在网上搜索了好几个小时,找不到解决办法。我使用的代码是: 有没有办法在Java中维护alpha通道?我尝试过将png转换为BuffereImage、Image等,并将其粘贴到剪贴板,但没有任何效果。