@sherzad_90

Как загрузить и обрезать фото?

Я новичок, только учусь. Кто разбирается с кодом на php, помогите, пожалуйста.

Вот написал я код загрузка аватарки точнее я его скачал и немного переделал. Посмотрите, пожалуйста, код и подскажите где нужно изменить.

Там есть функция "createThumb()" которая обрезает фото.
Вот надо обрезанный фото сохранить с новым именем в папку и добавить в базу имя файла.

Код ниже:
<?php
    $path = "./uploads/";
    
    $valid_formats = array("jpg", "png", "jpeg");
    
    if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
        
        $name = $_FILES['photoimg']['name'];
        $size = $_FILES['photoimg']['size'];
        $tmp  = $_FILES['photoimg']['tmp_name'];

        //Начало функции createThumb
        function createThumb($path1, $file_type){
            $source_image = FALSE;

            if (preg_match("/jpg|JPG|jpeg|JPEG/", $file_type)) {
                $source_image = imagecreatefromjpeg($path1);
            }
            elseif (preg_match("/png|PNG/", $file_type)) {
        
                if (!$source_image = @imagecreatefrompng($path1)) {
                    $source_image = imagecreatefromjpeg($path1);
                }
            }   
            if ($source_image == FALSE) {
                $source_image = imagecreatefromjpeg($path1);
            }

            $orig_w = imageSX($source_image);
            $orig_h = imageSY($source_image);
    
            if ($orig_w < $new_w && $orig_h < $new_h) {
                $desired_width = $orig_w;
                $desired_height = $orig_h;
            } else {
                $scale = min($new_w / $orig_w, $new_h / $orig_h);
                $desired_width = ceil($scale * $orig_w);
                $desired_height = ceil($scale * $orig_h);
            }
                    
            if ($squareSize != '') {
                $desired_width = $desired_height = $squareSize;
            }

            /* create a new, "virtual" image */
            $virtual_image = imagecreatetruecolor($desired_width, $desired_height);
            // for PNG background white-----------
            $kek = imagecolorallocate($virtual_image, 255, 255, 255);
            imagefill($virtual_image, 0, 0, $kek);
    
            if ($squareSize == '') {
            /* copy source image at a resized size */
                imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $orig_w, $orig_h);
            } else {
                $wm = $orig_w / $squareSize;
                $hm = $orig_h / $squareSize;
                $h_height = $squareSize / 2;
                $w_height = $squareSize / 2;
        
                if ($orig_w > $orig_h) {
                    $adjusted_width = $orig_w / $hm;
                    $half_width = $adjusted_width / 2;
                    $int_width = $half_width - $w_height;
                    imagecopyresampled($virtual_image, $source_image, -$int_width, 0, 0, 0, $adjusted_width, $squareSize, $orig_w, $orig_h);
                }

                elseif (($orig_w <= $orig_h)) {
                    $adjusted_height = $orig_h / $wm;
                    $half_height = $adjusted_height / 2;
                    imagecopyresampled($virtual_image, $source_image, 0,0, 0, 0, $squareSize, $adjusted_height, $orig_w, $orig_h);
                } else {
                    imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $squareSize, $squareSize, $orig_w, $orig_h);
                }
            }
    
            if (@imagejpeg($virtual_image, $path2, 90)) {
                imagedestroy($virtual_image);
                imagedestroy($source_image);
                return TRUE;
            } else {
                return FALSE;
            }
        }
        //Конце функции createThumb

        if(strlen($name)){ //возвращает длину строки

            list($txt, $ext) = explode(".", $name);
            
            if(in_array($ext,$valid_formats)){
                if($size<(1024*1024)){ // Макс размер фото 1MB
                    
                    $actual_image_name = time().$_SESSION['id'].".".$ext;

                    if(move_uploaded_file($tmp, $path.$actual_image_name)){

                        mysqli_query($CONNECT,"UPDATE `users` SET profile_image='$actual_image_name' WHERE id='$_SESSION[id]'");
                        
                        echo "<img src='./uploads/".$actual_image_name."' class='preview'>";
                    }else echo'<span style="color:red;">Что-то пошло не так!</span>';
                }else echo'<span style="color:red;">Размер файла превышает 1Mb!</span>';
            }else echo'<span style="color:red;">Выбран неправильный формат!</span>'; 
        }else echo'<span style="color:grey;">Пожалуйста выберите фото!</span>';
    exit();
    }
?>
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега PHP
♬♬
Для начала:
  1. смотрите эту строчку: if (@imagejpeg($virtual_image, $path2, 90)) { – квадратная картинка должна сохраниться в путь $path2, но его значение нигде не определено;
  2. функция createThumb() объявлена, но нигде не вызывается;
Ответ написан
errogaht
@errogaht
PHP developer
так делать не нужно, нужно поставить библиотеку для манипуляции изображениями image.intervention.io
тогда будет в 100 раз проще рабатать, а в таком коде чёрт ногу сломит. Хороший код - легко читать и он простой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы