当前位置: 首页 > 面试题库 >

imagecreatefrompng()使背景变成黑色而不是透明?

简滨海
2023-03-14
问题内容

我使用PHP和GD库制作缩略图,但是我的代码将png透明度变成了纯黑色,是否有解决方案来改进我的代码?

这是我的PHP缩略图制作者代码:

function cropImage($nw, $nh, $source, $stype, $dest) {
     $size = getimagesize($source);
     $w = $size[0];
      $h = $size[1];

      switch($stype) {
          case 'gif':
          $simg = imagecreatefromgif($source);
          break;
          case 'jpg':
          $simg = imagecreatefromjpeg($source);
          break;
          case 'png':
          $simg = imagecreatefrompng($source);
          break;
      }

      $dimg = imagecreatetruecolor($nw, $nh);
      $wm = $w/$nw;
      $hm = $h/$nh;
      $h_height = $nh/2;
      $w_height = $nw/2;

      if($w> $h) {
          $adjusted_width = $w / $hm;
          $half_width = $adjusted_width / 2;
          $int_width = $half_width - $w_height;
          imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
      } elseif(($w <$h) || ($w == $h)) {
          $adjusted_height = $h / $wm;
          $half_height = $adjusted_height / 2;
          $int_height = $half_height - $h_height;

          imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
      } else {
          imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
      }

      imagejpeg($dimg,$dest,100);
}

谢谢


问题答案:

在imagecreatetruecolor()之后:

<?php

// ... Before imagecreatetruecolor()

$dimg = imagecreatetruecolor($width_new, $height_new); // png ?: gif

// start changes
switch ($stype) {

    case 'gif':
    case 'png':
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($dimg , 0, 0, 0);
        // removing the black from the placeholder
        imagecolortransparent($dimg, $background);

        // turning off alpha blending (to ensure alpha channel information
        // is preserved, rather than removed (blending with the rest of the
        // image in the form of black))
        imagealphablending($dimg, false);

        // turning on alpha channel information saving (to ensure the full range
        // of transparency is preserved)
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}
// end changes

$wm = $w/$nw;
$hm = $h/$nh;

// ...


 类似资料:
  • 本文向大家介绍php缩放gif和png图透明背景变成黑色的解决方法,包括了php缩放gif和png图透明背景变成黑色的解决方法的使用技巧和注意事项,需要的朋友参考一下 工作中需要缩放一些gif图然后在去Imagecopymerge,可是发现使用了imagecreatetruecolor和imagecopyresampled后发现背景图不对,本来透明的背景图变成了黑色,后来发现做一些修改才可以: 然

  • 问题内容: 我可以将属性分配给仅属性而不是其上的文本吗? 我试过了: 但这不会改变不透明度。 问题答案: 听起来您想使用透明背景,在这种情况下,您可以尝试使用以下功能: R(红色),G(绿色)和B(蓝色)可以是s或s,其中数字255对应于100%。a(α)可以是0到1之间的a ,也可以是a ,其中数字1对应于100%(完全不透明)。 RGBa示例

  • 我需要帮助的java swing为GUI。我已经包含了“frame.getContentPane().setbackground(color.cyan);”到代码,但框架的背景颜色不变?谢谢你。

  • 我尝试将背景透明的tiff格式的图像转换为jpeg,以将其大小调整为200x200或1200x1200,但在转换时,背景变为黑色,我希望在转换后保持背景透明或白色 我的代码如下: 这在java JAI中是如何实现的?

  • 本文向大家介绍使用CSS设置背景色的不透明度,包括了使用CSS设置背景色的不透明度的使用技巧和注意事项,需要的朋友参考一下 要设置背景色的不透明度,请使用不透明度属性和RGBA颜色值。 示例 您可以尝试运行以下代码来实现opacity属性:

  • 我一直试图使用python OpenCV从grabcut输出中删除黑色背景。 上面的代码是我为保存grabcut输出而编写的。请建议,我如何才能去除黑色背景,使其透明?