Как изменить размер изображения при загрузке и создавать эскизы без библиотек? - PullRequest
1 голос
/ 09 ноября 2019

Прежде всего, я искал в Google и прочитал почти все сообщения, но большинство из них с использованием классов.

Мне нужно обрезать (изменить размер) изображение перед загрузкой на сервер, чем создать миниатюру, у меня есть функциякоторый создает миниатюру из переименованного и загруженного изображения, он отлично работает.

Но я хочу изменить размер исходного изображения перед загрузкой без какого-либо класса Я не хочу, чтобы целые коды было трудно читать. lol

функция generatenewstring(); создает случайный токен для нового имени.

Вот мой код загрузки файла, который загружает исходное изображение с примером вставки в mysql:

if(isset($_POST['btnSubmit']) && isset($_FILES['fupload'])) {

    $Name = htmlspecialchars($_POST['sname']);
    if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])){  
            $filename = generatenewstring(10).$_FILES['fupload']['name'];
            $source = $_FILES['fupload']['tmp_name'];   
            $target = $path_to_image_directory . $filename;

            move_uploaded_file($source, $target);

                $sql = "INSERT INTO tbl_images(image, sname) VALUES (:image, :sname)";
                $stmt =$pdo->prepare($sql);
                $stmt->bindParam(":image", $filename, PDO::PARAM_STR);
                $stmt->bindParam(":sname", $Name, PDO::PARAM_STR);
                if($stmt->execute()){
                    echo "All successfully.";
                } else {
                    echo "All Not Success.";
                }
        }
}

переменные из формы, отправляющие значения изображения в upload.php:

<from action="upload.php">
<input type="file" name="fupload"/>
<button type="submit">submit</button>
</form>

А вот и upload.php

require_once('function.php');


if(isset($_POST['btnSubmit']) && isset($_FILES['fupload'])) {
    $output['status'] = FALSE;
    set_time_limit(0);
    $allowedImageType = array("image/gif",   "image/jpeg",   "image/pjpeg",   "image/png",   "image/x-png"  );

    if ($_FILES['fupload']["error"] > 0) {
        $output['error']= "File Error";
    }
    elseif (!in_array($_FILES['fupload']["type"], $allowedImageType)) {
        $output['error']= "Invalid image format";
    }
    elseif (round($_FILES['fupload']["size"] / 1024) > 4096) {
        $output['error']= "Maximum file upload size is exceeded";
    } else {
        $temp_path = $_FILES['fupload']['tmp_name'];
        $selam = $_FILES['fupload']['name'];
        $file = pathinfo($_FILES['fupload']['name']);
        $fileType = $file["extension"];
        $fileName = rand(222, 888) . $selam;

        $small_thumbnail_path = "uploads/small/";
        createFolder($small_thumbnail_path);
        $small_thumbnail = $small_thumbnail_path . $fileName;

        $medium_thumbnail_path = "uploads/medium/";
        createFolder($medium_thumbnail_path);
        $medium_thumbnail = $medium_thumbnail_path . $fileName;

        $large_thumbnail_path = "uploads/large/";
        createFolder($large_thumbnail_path);
        $large_thumbnail = $large_thumbnail_path . $fileName;

        $thumb1 = createThumbnail($temp_path, $small_thumbnail,$fileType, 150, 93);
        $thumb2 = createThumbnail($temp_path, $medium_thumbnail, $fileType, 300, 185);
        $thumb3 = createThumbnail($temp_path, $large_thumbnail,$fileType, 550, 340);

        $Name = htmlspecialchars($_POST['sname']);      
        $sql = "INSERT INTO tbl_images(image, sname) VALUES (:image, :sname)";
        $stmt =$pdo->prepare($sql);
        $stmt->bindParam(":image", $large_thumbnail, PDO::PARAM_STR);
        $stmt->bindParam(":sname", $Name, PDO::PARAM_STR);
        if($stmt->execute()){
            echo "All successfully.";
        } else {
            echo "All Not Success.";
        }

        if($thumb1 && $thumb2 && $thumb3) {
            $output['status']=TRUE;
            $output['small']= $small_thumbnail;
            $output['medium']= $medium_thumbnail;
            $output['large']= $large_thumbnail;
        }
    }
    echo json_encode($output);
}

А это upload.php вызывает createThumbnails();И моя функция thumnails:

function createFolder($path)
{       
    if (!file_exists($path)) {
        mkdir($path, 0755, TRUE);
    }
}

function createThumbnail($sourcePath, $targetPath, $file_type, $thumbWidth, $thumbHeight){

    switch (strtoupper($file_type)):
    case 'jpg':
    $source = imagecreatefromjpeg($sourcePath);
    break;
    case 'JPG':
    $source = imagecreatefromjpeg($sourcePath);
    break;
    case 'png':
    $source = imagecreatefrompng($sourcePath);
    break;
    case 'PNG':
    $source = imagecreatefrompng($sourcePath);
    break;
    case 'gif':
    $source = imagecreatefromgif($sourcePath);
    break;
    case 'GIF':
    $source = imagecreatefromgif($sourcePath);
    break;
    default:
    echo "Invalid File Type";
    endswitch;

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

    $tnumbImage = imagecreatetruecolor($thumbWidth, $thumbHeight);

    imagecopyresampled($tnumbImage, $source, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $width, $height);

    if(imagegif($tnumbImage, $targetPath, 80)) {
        imagedestroy($tnumbImage);
        imagedestroy($source);
        return TRUE;
    }if(imagepng($tnumbImage, $targetPath, 80)) {
        imagedestroy($tnumbImage);
        imagedestroy($source);
        return TRUE;
    }if(imagejpeg($tnumbImage, $targetPath, 80)) {
        imagedestroy($tnumbImage);
        imagedestroy($source);
        return TRUE;
    } else {
        return FALSE;
    }
}

Я пробовал несколько вариантов, но не смог заставить его работать.

, наконец, я попытался image(); из PHP.NET

Их не сработалоили я не мог заставить их работать.

Спасибо за любую помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...