imagecreatefrompng 不工作

Posted

技术标签:

【中文标题】imagecreatefrompng 不工作【英文标题】:imagecreatefrompng not working 【发布时间】:2012-06-04 11:36:21 【问题描述】:

我正在尝试创建图像的缩略图,但我发现使用下面的代码只能将 JPG 图像转换为缩略图;它不适用于 PNG 和 GIF。我做错了什么?

function createThumbs( $pathToImages,$pathToThumbs,$thumbWidth,$fname)
    
      // open the directory
     // $dir = opendir( $pathToImages );


        // parse path for the extension
        $info = pathinfo($pathToImages);

        // continue only if this is a JPEG image
        //if ( strtolower($info['extension']) == 'jpg' )
        //
          //echo "Creating thumbnail for $fname <br />";

            echo strtolower($info['extension']);
            switch(strtolower($info['extension']))
                case 'jpg':
                        $img = imagecreatefromjpeg("$pathToImages" );
                    break;
                case 'gif':
                        $img = imagecreatefromgif("$pathToImages" );
                    break;
                case 'png':
                        $img = imagecreatefrompng("$pathToImages" );
                    break;
                default:
                        die("ERROR: FILE TYPE DOES NOT SUPPORT");
                    break;
            
          // load image and get image size

          $width = imagesx( $img );
          $height = imagesy( $img );

          // calculate thumbnail size
          $new_width = $thumbWidth;
          $new_height = floor( $height * ( $thumbWidth / $width ) );

          // create a new temporary image
          $tmp_img = imagecreatetruecolor( $new_width, $new_height );

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

          // save thumbnail into a file
          imagejpeg( $tmp_img, "$pathToThumbs$fname" );
          chmod("$pathToThumbs$fname",777);


    

【问题讨论】:

请定义“不起作用”的含义。您执行了哪些case 语句,哪些有效,哪些无效,是否有任何错误? 你是怎么调用这个函数的?从变量名看来,$pathToImages 应该是一个 PATH,文件名应该在 $fname 中。 $pathToImages 实际上是文件名吗?是的,让我们知道您看到了什么错误。 它不会为 png 和 gif 图像创建缩略图。但是 jpg 缩略图正在生成。我正在调用如下函数: createThumbs("../images/sliders/".$image1_newname,"../images/sliders/thumbs/",570,$image1_newname); chmod("../images/sliders/thumbs/".$image1_newname,777); 【参考方案1】:

您面临的问题是由于这一行:

// save thumbnail into a file
imagejpeg( $tmp_img, "$pathToThumbs$fname" );

php imagejpeg 会将图像保存为 Jpeg。

您需要使用适当的功能来保存每种文件类型。另外您需要控制输出文件类型扩展名,如果不是联合图像专家组文件,.jpeg 将不会被占用。

处理文件扩展名

PHP image_type_to_extension 的 cmets 上有一些很好的例子!

处理保存过程

imagewbmp

// Save the image as a WBMP
imagewbmp( $tmp_img, "$pathToThumbs$fname" . '.wbmp' );

imagewbmp() 输出或保存给定图像的 WBMP 版本。

imagegif

// Save the image as a GIF
imagegif( $tmp_img, "$pathToThumbs$fname" . '.gif' );

imagegif() 从图像图像文件名中创建 GIF 文件。

imagepng

// Save the image as a PNG
imagepng( $tmp_img, "$pathToThumbs$fname" . '.png' );

imagepng — 将 PNG 图像输出到浏览器或文件。

【讨论】:

【参考方案2】:
        $new_images = $_FILES["profilepic"]["name"];

        $width = 400; //*** Fix Width & Heigh (Autu caculate) ***//
        $size = GetimageSize($images);
        $height = round($width * $size[1] / $size[0]);

        list($origwidth, $origheight, $origtype, $origattr) = getimagesize($images);
        $origfiletype = image_type_to_extension($origtype, true);
        // $filetype includes the dot.            
        $supported = array('.jpeg', '.png', '.gif');
        //check file type
        if (in_array($origfiletype, $supported)) 
            if ('.jpeg' == $origfiletype) 
                $images_orig = ImageCreateFromJPEG($images);
             else if ('.png' == $origfiletype) 
                try 
                    $images_orig = ImagecreateFromPNG($images);
                 catch (Exception $e) 
                    echo $e->getMessage();
                    exit;
                
             else if ('.gif' == $origfiletype) 
                try 
                    $images_orig = ImagecreateFromGIF($images);
                 catch (Exception $e) 
                    echo $e->getMessage();
                    exit;
                
            

            $photoX = ImagesX($images_orig);
            $photoY = ImagesY($images_orig);
            $images_fin = ImageCreateTrueColor($width, $height);
            ImageCopyResampled($images_fin, $images_orig, 0, 0, 0, 0, $width + 1, $height + 1, $photoX, $photoY);
            ImageJPEG($images_fin, dirname(__FILE__) . "/gallery/" . $new_images, $jpeg_quality);
            ImageDestroy($images_orig);
            ImageDestroy($images_fin);

【讨论】:

请提供某种解释说明这应该如何提供帮助,而不仅仅是发布一段代码。

以上是关于imagecreatefrompng 不工作的主要内容,如果未能解决你的问题,请参考以下文章

PHP 保存 imagecreatefrompng

imagecreatefrompng() 制作黑色背景而不是透明?

PHP GD水印脚本产生空白水印

添加两个图像 PHP

gd-png 无法分配图像数据

(Angular 6) Angular Universal - 不等待内容 API 调用