За последние 24 часа нас посетили 16817 программистов и 1641 робот. Сейчас ищут 960 программистов ...

Корректировка изображения...

Тема в разделе "PHP для новичков", создана пользователем Panich, 6 июн 2012.

  1. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Смысл в том,что бы сохранить в базу три изображения:
    1. Исходное.
    2. Размером 180х180.
    3. Размером 80х80.
    Код:
    Код (Text):
    1. $path_to_directory = "files/avatars/";
    2.                     $filename = $_FILES['fupload']['name'];                                
    3.                     $source = $_FILES['fupload']['tmp_name'];
    4.                     $date = time();          
    5.                     $target = $path_to_directory."big_".$date.".jpg";
    6.                     move_uploaded_file($source, $target);
    7.                     $big_avatar = $target;
    8.                    
    9.                     $target_smoll = $path_to_directory."smoll_".$date.".jpg";
    10.                     move_uploaded_file($source, $target_smoll);
    11.                    
    12.                     if(preg_match('/[.](GIF)|(gif)$/', $filename))
    13.                     {                            
    14.                     $im = imagecreatefromgif($target);
    15.                     }                                
    16.                     if(preg_match('/[.](PNG)|(png)$/', $filename))
    17.                     {
    18.                     $im = imagecreatefrompng($target);
    19.                     }                
    20.                     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename))
    21.                     {        
    22.                     $im = imagecreatefromjpeg($target);        
    23.                     }
    24.                     $w = 180;
    25.                     $w_src = imagesx($im);
    26.                     $h_src = imagesy($im);
    27.                     $dest = imagecreatetruecolor ($w,$w);
    28.                    
    29.                     $w_s = 80;
    30.                     $dest_s = imagecreatetruecolor ($w_s,$w_s);
    31.                     if ($w_src > $h_src)
    32.                     {
    33.                     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));        
    34.                     imagecopyresampled ($dest_s, $im, 0, 0, round ((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w_s, $w_s, min($w_src,$h_src), min($w_src,$h_src));      
    35.                     }
    36.                     else
    37.                     {
    38.                         if ($w_src < $h_src)
    39.                         {
    40.                         imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));  
    41.                         imagecopyresampled ($dest_s, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));    
    42.                         }
    43.                         else
    44.                         {
    45.                             if ($w_src == $h_src)
    46.                             {
    47.                             imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    48.                             imagecopyresampled ($dest_s, $im, 0, 0, 0, 0, $w_s, $w_s, $w_src, $w_src);
    49.                             }
    50.                         }
    51.                     }
    52.                     imagejpeg($dest, $path_to_directory.$date.".jpg");
    53.                     $avatar = $path_to_directory.$date.".jpg";
    54.                     imagejpeg($dest_s, $path_to_directory."smoll_".$date.".jpg");
    55.                     $smoll_avatar = $path_to_directory."smoll_".$date.".jpg";
    На выходе:
    Оригинал сохраняется как нужно, 180х180 тоже всё как хочу,а 80х80 обрезается в верхний левый ряд.Всё с ним делаю как и с 180х180,а результат другой.Нужны не обрезанные углы,а миниатюры...
    Прошу помощи...
     
  2. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Ох и завалили Вы меня советами и разъяснениями...прямо и не знаю какой совет более подходящим будет!!!
    Времени нет столько всего прочесть...
     
  3. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ты забыл сообщить, что проблема возникает с вертикальными картинками. Тогда бы круг поиска проблемы сузился, и сразу бы стало ясно, что ты неправильно указал исходную ширину и высоту для мелкого изображения. Заменить $w на $w_s:
    Код (PHP):
    1. imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
    2. imagecopyresampled($dest_s, $im, 0, 0, 0, 0, $w_s, $w_s, min($w_src,$h_src), min($w_src,$h_src)); 
     
  4. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Спасибо!!!
    Щас попробую,но мне тут на другом форуме подсказали,а точнее обозвали,мой код "говнокодом",вот и думаю теперь всё переделывать с изучением совсем других способов,а точнее применением других скриптов...!!!
    Ещё раз спасибо!
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Шарят :)
    Я уж не стал ничего писать, чтобы тебя не расстраивать.
     
  6. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Да ладно,тут и так всё ясно...
    Основная работа не позволяет в полной мере всё изучать,а так знаний на что хватает, то и пишу...короче:учиться,учиться и ещё раз учиться!!!