将图像和缩略图一起上传,但未生成缩略图

Posted

技术标签:

【中文标题】将图像和缩略图一起上传,但未生成缩略图【英文标题】:Uploading image and thumbnail together but the thumbnail is not generating 【发布时间】:2021-07-03 04:05:13 【问题描述】:

我试图在我现有的代码中添加一种从正在上传的全尺寸图像生成缩略图的方法。我在这里进行了一些搜索,找到了一个功能来完成我正在寻找的功能,但没有生成我的缩略图。我设置它的方式是完整尺寸的图像进入images/lg/ 文件夹,缩略图将进入images 文件夹。但是,只有大图像会进入它们各自的文件夹,而不会生成缩略图。

<?php 
include_once 'includes/dbh.inc.php';
function make_thumb($src, $dest, $desired_width) 

    /* read the source image */
    $source_image = imagecreatefromjpeg($src);
    $width = imagesx($source_image);
    $height = imagesy($source_image);

    /* find the "desired height" of this thumbnail, relative to the desired width  */
    $desired_height = floor($height * ($desired_width / $width));

    /* create a new, "virtual" image */
    $virtual_image = imagecreatetruecolor($desired_width, $desired_height);

    /* copy source image at a resized size */
    imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);

    /* create the physical thumbnail image to its destination */
    imagejpeg($virtual_image, $dest);

if (isset($_GET['id']))
if (isset($_POST['submit'])) 
    $file = $_FILES['file'];

    $fileName = $_FILES['file']['name'];
    $fileType = $_FILES['file']['type'];
    $fileTmpName = $_FILES['file']['tmp_name'];
    $fileSize = $_FILES['file']['size'];
    $fileError = $_FILES['file']['error'];

    $fileExt = explode('.', $fileName);
    $fileActualExt = strtolower(end($fileExt));

    $allowed = array('jpg', 'jpeg', 'png');
    if (in_array($fileActualExt, $allowed))
        if($fileError === 0)
            if ($fileSize < 5000000) 
                $fileNameNew = "car".$_GET['id'].".".$fileActualExt;
                $fileDestination = 'images/lg/'.$fileNameNew;
                move_uploaded_file($fileTmpName, $fileDestination); //files going to the 'images/lg' folder
                $sql = "UPDATE rollingstock SET stockImgStatus=? WHERE stockID=?";
                $stmt = $mysqli->prepare($sql);
                $stockImgStatus = 1;
                if (file_exists($fileDestination))  /*if the file exisits make a thumbnail */
                $src = $fileDestination;
                $dest = 'images/'.$fileNameNew;
                $desired_width = "395"; 
                make_thumb($src, $dest, $desired_width); //Thumbnails going to the 'imgages' folder
                
                if ($stmt &&
                    $stmt -> bind_param('ii', $stockImgStatus, $_GET['id'])&&
                    $stmt -> execute()&&
                    $stmt -> affected_rows === 1
                ) 
                    header("Location: list.php?list=all"); 
                else
                    echo "Not Updated";
                
                
            else 
                echo "Your file is too big!";
            
        else
            echo "There was an error uploading for file!";
        
else
    echo "You cannot upload files of this type!";


【问题讨论】:

【参考方案1】:

我检查了您的代码,总体上没问题。 make_thumb() 函数中只有一个小错误,您使用了 imagecreatefromjpeg(),它适用于 .jpeg 和 .jpg 图像类型,但不适用于您也接受的 .png 图像。

您可以简单地在您的make_thumb() 函数中添加一个检查来检查文件类型并调用适当的方法,就像提到的in this post。

我还从链接的帖子中添加了一个修改后的 sn-p:

switch ( strtolower( pathinfo( $src, PATHINFO_EXTENSION ))) 
        case 'jpeg':
        case 'jpg':
            $source_image = imagecreatefromjpeg($src);
        break;

        case 'png':
            $source_image = imagecreatefrompng($src);
        break;

        case 'gif':
            $source_image = imagecreatefromgif($src);
        break;

        default:
            throw new InvalidArgumentException('File "'.$src.'" is not valid jpg, png image.');
        break;
    

【讨论】:

【参考方案2】:

我能够使用提供的代码生成大图像和缩略图。 请检查您的图片文件夹是否有写权限。

【讨论】:

我拥有该文件夹的写入权限。我在我的本地主机上进行测试,我是我帐户的管理员。 这更像是一个评论而不是一个实际的答案。请不要发布 cmets 作为答案。

以上是关于将图像和缩略图一起上传,但未生成缩略图的主要内容,如果未能解决你的问题,请参考以下文章

为文本文件生成缩略图

Dropzone 跨平台缩略图生成

c#为较小的图像生成缩略图

上传脚本,裁剪/剪切缩略图

Codeigniter缩略图图像路径不能存储在MySql中

从纵向缩略图生成方形图像