Tepken Vannkorn
Tepken Vannkorn

Reputation: 9713

Generated thumbnails are all black when uploading

I'm generating thumbnail images from the original jpeg files when they are being uploaded. I could actually create and move those thumbnail files to another directory, but the problem is that those thumbnail files displays only the black color while uploading.

My code.

if(isset($_POST['upload'])){
    $img = $_FILES['origin']['name'];
    move_uploaded_file($_FILES['origin']['tmp_name'], 'image/'.$img);

    define("SOURCE", 'image/');
    define("DEST", 'thumb/');
    define("MAXW", 120);
    define("MAXH", 90);

    $jpg = SOURCE.$img;

    if($jpg){
        list($width, $height, $type) = getimagesize($jpg); //$type will return the type of the image

        if(MAXW >= $width && MAXH >= $height){
            $ratio = 1;
        }elseif($width > $height){
            $ratio = MAXW / $width;
        }else{
            $ratio = MAXH / $height;
        }

        $thumb_width = round($width * $ratio); //get the smaller value from cal # floor()
        $thumb_height = round($height * $ratio);

        $thumb = imagecreatetruecolor($thumb_width, $thumb_height);

        $path = DEST.$img."_thumb.jpg";
        imagejpeg($thumb, $path);

        echo "<img src='".$path."' alt='".$path."' />";
    }
    imagedestroy($thumb);
}

and the thumbnail file looks like this:

enter image description here

Upvotes: 1

Views: 1938

Answers (2)

Tepken Vannkorn
Tepken Vannkorn

Reputation: 9713

Hmm, I just found my bug right now. The problem is that I use $jpg = SOURCE.$img; instead of $jpg = imagecreatefromjpeg($jpg); and also I need to copy the sample image to the new thumbnail image using

imagecopyresampled( $thumb, $jpg, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height );

Then it works!!!

Thanks Alex for your answer which lead me to this solution.

Upvotes: 2

madfriend
madfriend

Reputation: 2430

From php manual:

imagecreatetruecolor() returns an image identifier representing a black image of the specified size.

So the problem is that you actually create this black image and save it.

$thumb = imagecreatetruecolor($thumb_width, $thumb_height);

For solution on resizing, please refer to this question on stackoverflow.

Upvotes: 3

Related Questions