上传时生成的缩略图全黑

时间:2012-06-17 17:08:00

标签: php image upload thumbnails

我正在上传原始jpeg文件时生成缩略图。我实际上可以创建这些缩略图文件并将其移动到另一个目录,但问题是这些缩略图文件在上传时只显示黑色。

我的代码。

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

,缩略图文件如下所示:

enter image description here

2 个答案:

答案 0 :(得分:3)

来自php手册:

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

所以问题是你实际上是创建了这个黑色图像并保存它。

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

有关调整大小的解决方案,请参阅this question on stackoverflow

答案 1 :(得分:2)

嗯,我刚才发现了我的虫子。问题是我使用$jpg = SOURCE.$img;而不是$jpg = imagecreatefromjpeg($jpg);,我还需要使用

将示例图像复制到新的缩略图
imagecopyresampled( $thumb, $jpg, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height );

然后它有效!!!

感谢Alex的回答,这使我得到了解决方案。