【问题标题】:Phalcon PNG to JPG and remove transparent background imagePhalcon PNG转JPG并删除透明背景图片
【发布时间】:2016-05-11 01:06:31
【问题描述】:

我正在使用 Phalcon PHP Phalcon\Images\Adapter\GD,但我在将 PNG 转换为 JPG 时遇到问题。

当我在我的服务器上上传 PNG 图像时,我调整了这个图像的大小,我使用背景方法 $myImage->background('#FFFFFF') 将背景颜色设置为白色,但是这个背景现在是黑色的......我不明白为什么,之后我拆分扩展名 .PNG 并添加 .JPG。

如何将背景颜色图像设置为白色?

【问题讨论】:

    标签: php image alpha phalcon


    【解决方案1】:

    试试这个它对我有用:

    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());
    

    您可能不需要某些代码。

    【讨论】:

    • 感谢您的回答。但是背景对我来说总是黑色的:/。
    • 图片的原始背景是什么?白色还是黑色?
    • 我的图片是透明的
    • 那么它应该可以工作。 Bcoz 它将保持透明度。你试过这个吗?
    • 是的,我正在使用您的功能。我发送具有透明背景的 PNG 图像,该图像以黑色背景和变量 $transparency == -1 保存
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2013-12-10
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多