Resizing with GD outputs black images

前端 未结 4 1076
抹茶落季
抹茶落季 2021-01-17 07:35

What can cause php gd to produce a black image after resizing? The following code always outputs a black image for every valid jpeg file.



        
4条回答
  •  青春惊慌失措
    2021-01-17 08:35

    Below function creates a thumbnail, with few changes you can O/P it to the screen as well. I think this way it's more useful.

    /*
     * PHP function to resize an image maintaining aspect ratio
     * http://salman-w.blogspot.com/2008/10/resize-images-using-phpgd-library.html
     *
     * Creates a resized (e.g. thumbnail, small, medium, large)
     * version of an image file and saves it as another file
     */
    
    define('THUMBNAIL_IMAGE_MAX_WIDTH', 150);
    define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150);
    
    function generate_image_thumbnail($source_image_path, $thumbnail_image_path)
    {
        list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
        switch ($source_image_type) {
            case IMAGETYPE_GIF:
                $source_gd_image = imagecreatefromgif($source_image_path);
                break;
            case IMAGETYPE_JPEG:
                $source_gd_image = imagecreatefromjpeg($source_image_path);
                break;
            case IMAGETYPE_PNG:
                $source_gd_image = imagecreatefrompng($source_image_path);
                break;
        }
        if ($source_gd_image === false) {
            return false;
        }
        $source_aspect_ratio = $source_image_width / $source_image_height;
        $thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
        if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
            $thumbnail_image_width = $source_image_width;
            $thumbnail_image_height = $source_image_height;
        } elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
            $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
            $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
        } else {
            $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
            $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
        }
        $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
        imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
        imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
        imagedestroy($source_gd_image);
        imagedestroy($thumbnail_gd_image);
        return true;
    }
    

    Refer this more information.

    If php-gd doesn't exist use the following command.

    sudo apt-get install php5-gd
    

提交回复
热议问题