Изменение размера картинки при загрузке на php (не могу настроить корректно)

143
18 сентября 2019, 10:30

Добрый день! Помогите сделать одну штуку! Есть уменьшение размера картинки , точнее исходный размер $final_width_of_image = 1600;

Но! При загрузке например 800х800пкс он картинки растягивает до указанных 1600пкс.

Как сделать сто бы картинки больше 1600пкс резались , а меньшего разрешения не менялись (не растягивались до 1600пкс)

Заранее спасибо :)

<?php
if (is_uploaded_file($_FILES['upload_photo']['tmp_name']))
{                                      
    if ( ($_FILES['upload_photo']['type'] == 'image/gif' || $_FILES['upload_photo']['type'] == 'image/jpeg' || $_FILES['upload_photo']['type'] == 'image/png') && $_FILES['upload_photo']['size'] <= 2024000 ) 
    {       
        $new_name = date("d-m-Y-h-i-s",strtotime("+0 hour"));       
        $upload_photo = $new_name.'-'.$_FILES['upload_photo']['name'];
        //copy($_FILES['upload_photo']['tmp_name'],"../newsimg/".$upload_photo);
$file_name = $_FILES['upload_photo']['name']; 

$path =    '../pro/';
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$new_name.'-'.$_FILES['upload_photo']['name']))//проверка формата
                             {   

                                           $filename    = $new_name.'-'.$_FILES['upload_photo']['name'];
                                           $source    = $_FILES['upload_photo']['tmp_name'];        
                                           $target    = $path . $filename;
                                           move_uploaded_file($source, $target); 

 $final_width_of_image = 1600;

    if(preg_match('/[.](jpg)$/', $filename)) {
        $im = imagecreatefromjpeg($path . $filename);
    } else if (preg_match('/[.](jpeg)$/', $filename)) {
        $im = imagecreatefromjpeg($path . $filename);
    } else if (preg_match('/[.](JPG)$/', $filename)) {
        $im = imagecreatefromjpeg($path . $filename);
    } else if (preg_match('/[.](JPEG)$/', $filename)) {
        $im = imagecreatefromjpeg($path . $filename);
    } else if (preg_match('/[.](gif)$/', $filename)) {
        $im = imagecreatefromgif($path . $filename);
    } else if (preg_match('/[.](GIF)$/', $filename)) {
        $im = imagecreatefromgif($path . $filename);
    } else if (preg_match('/[.](png)$/', $filename)) {
        $im = imagecreatefrompng($path . $filename);
    } 
    $ox = imagesx($im);
    $oy = imagesy($im);
    $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));

  $nm = imagecreatetruecolor($nx, $ny);
  imagecopyresampled($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);    

    imagejpeg($nm, $path . $filename);
}

        echo "<script type=\"text/javascript\">parent.document.getElementById(\"imageId\").innerHTML = '<img src=\"../pro/{$upload_photo}\" alt=\"\" style=\"max-width:350px;\">'; parent.document.getElementById(\"image_upload_status\").innerHTML = '<p class=\"image_success\"><br><b>Изображение <span class=\"ni\">{$upload_photo}</span> успешно загружено: &nbsp;  <span class=\"imgsc\" style=\"color:blue;cursor:pointer;\">в галерею</span></b></p>';</script>";
    }
    else if (($_FILES['upload_photo']['type'] != 'image/gif' && $_FILES['upload_photo']['type'] != 'image/jpeg' && $_FILES['upload_photo']['type'] != 'image/png'))
    {
        echo "<script type=\"text/javascript\">parent.document.getElementById(\"image_upload_status\").innerHTML = '<p class=\"image_error\">Недопустимый тип файла</p>';</script>";
    }
    else if ($_FILES['upload_photo']['size'] > 2024000)
    {
        echo "<script type=\"text/javascript\">parent.document.getElementById(\"image_upload_status\").innerHTML = '<p class=\"image_error\">Недопустимый размер файла</p>';</script>";
    }
    else
    {
        echo "<script type=\"text/javascript\">parent.document.getElementById(\"image_upload_status\").innerHTML = '<p class=\"image_error\">Произошла ошибка при загрузке файла</p>';</script>";
    }
}
?>
Answer 1

Просто вроверяйте ширину, если больше 1600, тогда режьте, если нет - просто пропускайте этот блок:

$ox = imagesx($im); // тут ширина картинки
$oy = imagesy($im); // тут высота картинки
if ($ox > 1600) {
   $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));

    $nm = imagecreatetruecolor($nx, $ny);
    imagecopyresampled($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);    

    imagejpeg($nm, $path . $filename); 
}
READ ALSO
Шифрованая строка в php и java отличается

Шифрованая строка в php и java отличается

Шифрую одну и туже строку одним и тем же ключем в пхп и ява на выходе получается разная строкаПодскажите в чем у меня ошибка?

109
Как пофиксить баг на gmail, не правильное отображение сгенерированного кода?

Как пофиксить баг на gmail, не правильное отображение сгенерированного кода?

Отправляю по почте сгенерированный на js код, когда на gmail приходит письмо то отображает его совсем не вменяемо

108
Основы PHP и array_rand

Основы PHP и array_rand

Друзья, добрый день помогите с вопросом:

101
Как скрыть поля в профиле пользователя только для определенных групп пользователей? Bitrix

Как скрыть поля в профиле пользователя только для определенных групп пользователей? Bitrix

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

99