Phalcon PNG 转 JPG 并移除透明背景图像

3
我正在使用 Phalcon PHP Phalcon\Images\Adapter\GD,遇到了PNG转JPG的问题。
当我上传一个PNG图像到我的服务器时,我会调整它的大小,并用$myImage->background('#FFFFFF')方法将背景颜色设置为白色,但现在背景却是黑色的......我不明白为什么,然后我把扩展名从.PNG分离出来并添加了.JPG。
如何将图像的背景颜色设置为白色?
1个回答

0

你可以试试这个,对我很有效:

function img_resize($file,$width=0,$height=0,$proportional=false,$output='file' ) {

        if ( $height <= 0 && $width <= 0 ) return false;
        # Setting defaults and meta
        $info= getimagesize($file);
        $image= '';
        $final_width= 0;
        $final_height= 0;
        list($width_old, $height_old) = $info;
        # Calculating proportionality
        if ($proportional) {
          if      ($width  == 0)  $factor = $height/$height_old;
          elseif  ($height == 0)  $factor = $width/$width_old;
          else                    $factor = min( $width / $width_old, $height / $height_old );
          $final_width  = round( $width_old * $factor );
          $final_height = round( $height_old * $factor );
        }
        else {
          $final_width = ( $width <= 0 ) ? $width_old : $width;
          $final_height = ( $height <= 0 ) ? $height_old : $height;
        }
        # Loading image to memory according to type
        switch ( $info[2] ) {
          case IMAGETYPE_GIF:   $image = imagecreatefromgif($file);   break;
          case IMAGETYPE_JPEG:  $image = imagecreatefromjpeg($file);  break;
          case IMAGETYPE_PNG:   $image = imagecreatefrompng($file);   break;
          default: return false;
        }
        # This is the resizing/resampling/transparency-preserving magic
        $image_resized = imagecreatetruecolor( $final_width, $final_height );
        if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
          $transparency = imagecolortransparent($image);
          if ($transparency >= 0) {
            $transparent_color  = imagecolorsforindex($image, $trnprt_indx);
            $transparency       = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
            imagefill($image_resized, 0, 0, $transparency);
            imagecolortransparent($image_resized, $transparency);
          }
          elseif ($info[2] == IMAGETYPE_PNG) {
            imagealphablending($image_resized, false);
            $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
            imagefill($image_resized, 0, 0, $color);
            imagesavealpha($image_resized, true);
          }
        }
        imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
        # Preparing a method of providing result
        switch ( strtolower($output) ) {
          case 'browser':
            $mime = image_type_to_mime_type($info[2]);
            header("Content-type: $mime");
            $output = NULL;
          break;
          case 'file':
            $output = $file;
          break;
          case 'return':
            return $image_resized;
          break;
          default:
          break;
        }
        # Writing image according to type to the output destination
        switch ( $info[2] ) {
          case IMAGETYPE_GIF:   imagegif($image_resized, $output);    break;
          case IMAGETYPE_JPEG:  imagejpeg($image_resized, $output);   break;
          case IMAGETYPE_PNG:   imagepng($image_resized, $output);    break;
          default: return false;
        }
        return true;
    }

调用函数如下:

$image = new Phalcon\Image\Adapter\GD(YOUR_IMAGE_PATH);
$a=img_resize($image->getRealpath(),$image->getWidth(),$image->getHeight());

有些代码对你可能并非必要。


谢谢您的回答。但是对我来说背景始终是黑色的 :/。 - John
我的图像是透明的。 - John
那么它应该可以工作。因为它将保留透明度。你试过这个吗? - Mr. Engineer
将此行更改为:$color = imagecolorallocatealpha($image_resized, 255, 255, 255);,替换原有的$color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127); - Mr. Engineer
同样的行为 :( 我的背景始终是黑色。 - John
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接