Установить ширину при загрузки изображения

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
Подскажите пожалуйста, уважаемые знатоки, как в данном коде установить функцию сжатия изображения до 1600 пикселей в ширину, а если изображение меньше, то оставить каким его загрузили.

PHP:
<?php

if (isset($_FILES['fupload']['name'])){
    if (empty($_FILES['fupload']['name']) AND $_FILES['fupload']['name'] == ''){
       
        $noavatar2 = "bg_demo.jpg";
        $result = mysql_query("SELECT avatar2 FROM users WHERE id='$userid'");
            $avatar2ka = mysql_fetch_array($result);
       
        if ($avatar2ka['avatar2'] != $noavatar2) {
            unlink ('../avatars/'.$avatar2ka['avatar2']);
        }   
    }

    else{
        $path_to_90_directory = '../avatars/';           
        if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))
             {                       
                $filename = $_FILES['fupload']['name'];
                $source = $_FILES['fupload']['tmp_name'];   
                $target = $path_to_90_directory . $filename;
                move_uploaded_file($source, $target);
            if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
            $im = imagecreatefromgif($path_to_90_directory.$filename) ;
                        }
            if(preg_match('/[.](PNG)|(png)$/', $filename)) {
            $im = imagecreatefrompng($path_to_90_directory.$filename) ;
   

            }
           
            if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
                $im = imagecreatefromjpeg($path_to_90_directory.$filename);             }
               
       
        $w = imagesx($im);         
        $quality = 80;                 
        $w_src = imagesx($im);
        $h_src = imagesy($im);         
                   
        $rezim = 2;       
       
        switch ($rezim){
                //**************************** 1
            case "1" :
               
                 $dest = imagecreatetruecolor($w,$w);

                             
                if ($w_src > $h_src){
                    imagecopyresampled($dest, $im, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
                }
               
                if ($w_src < $h_src){
                    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
                }
                               
                if ($w_src == $h_src){
                    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $h_src);
                }

            break;
               
            case "2" :
                $prop = $w_src/$h_src;
                $h = $w/$prop;
                $dest = imagecreatetruecolor($w,$h);
                imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $h, $w_src, $h_src);
            break;
           
        }
       
        $random = rand(1000000, 9999999);
        imagejpeg($dest, $path_to_90_directory.$random.".jpg", $quality);       
        $avatar2 = $random.".jpg";

        $delfull = $path_to_90_directory.$filename;
        unlink ($delfull);
        $result = mysql_query("SELECT avatar2 FROM users WHERE id='$userid'");
                $avatar2ka = mysql_fetch_array($result);
       
        if ($avatar2ka['avatar2'] != $noavatar2) {
            unlink ('../avatars/'.$avatar2ka['avatar2']);
        }
        }
        else{
           
            exit ("Only <strong>JPG,GIF and PNG</strong>");
        }
       
    }
   

    $up = mysql_query("UPDATE users SET avatar2='$avatar2' WHERE id='$userid'");
    if ($up == true) {
    echo "<meta http-equiv='Refresh' content='0; URL=/web/admin/w.php#bg'>";
    }}
?>
 
Попробуй сразу после
PHP:
        $w = imagesx($im);
добавить
PHP:
        $w = $w > 1600 ? 1600 : $w;
 
  • Нравится
Реакции: vave
Сорь, за оффтоп, но зачем после $w = imagesx($im); выполнять туже самую функцию $w_src = imagesx($im); ? Может, я чего-то пропустил? Да, понятно что сам по себе скрипт - старый быдлокод, но всё-же... зачем? Да и как такое в голову могло прийти?) Можно поинтересоваться - откуда этот код? Если не самопис
 
А как это ненужное всё удалить? не уверен что мне это надо... Ругается на строчку imagejpeg($dest, $path_to_90_directory.$random.".jpg", $quality);

PHP:
        $rezim = 2;       
       
        switch ($rezim){
                //**************************** 1
            case "1" :
               
                 $dest = imagecreatetruecolor($w,$w);

                             
                if ($w_src > $h_src){
                    imagecopyresampled($dest, $im, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
                }
               
                if ($w_src < $h_src){
                    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
                }
                               
                if ($w_src == $h_src){
                    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $h_src);
                }

            break;
               
            case "2" :
                $prop = $w_src/$h_src;
                $h = $w/$prop;
                $dest = imagecreatetruecolor($w,$h);
                imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $h, $w_src, $h_src);
            break;
           
        }

 
А как это ненужное всё удалить? не уверен что мне это надо... Ругается на строчку imagejpeg($dest, $path_to_90_directory.$random.".jpg", $quality);

Без этого тоже будет ругаться. И что значит ругается? Давайте конкретную и полную ошибку, разве что пути можете потереть.
Но можно выкинуть часть кода. case "1" у нас не используется и непонятно зачем он здесь, поэтому можно сократить до:
PHP:
                $prop = $w_src/$h_src;
                $h = $w/$prop;
                $dest = imagecreatetruecolor($w,$h);
                imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $h, $w_src, $h_src);
 
В свое время познакомился с замечательной либой phpThumb для обработки изображений.
Либа имеет очень большой набор методов и кучу настроек.
Может обрабатывать графику как "на лету", так и самостоятельно кешить результаты (по умолчанию)
Может пригодится на случай, если нужно быстро впилить автоматические вотермарки на сайт, ресайзинг, наложить фильтры, например чб и так далее
Работает на PHP GD или ImageMagick(лучший вариант).
Страничка либы Для просмотра ссылки Войди или Зарегистрируйся
Можно генерить картинки 2мя способами:
- передачей оригинальной каритинки и параметров GETом Для просмотра ссылки Войди или Зарегистрируйся
- используя объектный подход (прямое подключение либы) Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху