За последние 24 часа нас посетили 54124 программиста и 1719 роботов. Сейчас ищут 843 программиста ...

Создание миниатюры изображения. Простой скрипт...

Тема в разделе "PHP для новичков", создана пользователем Invision, 22 мар 2011.

  1. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Ребят, будьте добры помогите написать наипростейший скрипт.

    Поддержка форматов только: jpeg, jpg, gif, png
    Загружаю изображение, создается миниатюра шириной в 100px и сохраняется в нужную дирректорию .

    Честно говоря бьюсь над этим. Загружать файлы не проблема, но создать миниатюру.. Рыскаю по просторам интернета, валяются куски кода, но некоторые не внушают доверия, другие слишком большие и нужно колеса откручивать)
     
  2. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    для жпег:

    PHP:
    1. <?php  
    2.   function imageresize($infile, $outfile, $neww, $newh, $quality = 75) {
    3.       $im=imagecreatefromjpeg($infile);
    4.       $k1=$neww/imagesx($im);
    5.       $k2=$newh/imagesy($im);
    6.       $k=$k1>$k2?$k2:$k1;
    7.      
    8.       $w=intval(imagesx($im)*$k);
    9.       $h=intval(imagesy($im)*$k);
    10.  
    11.       $im1=imagecreatetruecolor($w,$h);
    12.       $bckgrn = imagecolorallocate($im1, 249, 234,193);
    13.       imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
    14.      
    15.       imagejpeg($im1, $outfile, $quality);
    16.       imagedestroy($im);
    17.       imagedestroy($im1);
    18.     }
     
  3. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    спасибо но этого мало :(
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Invision
    всё, что есть
     
  5. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    PHP:
    1. <?
    2. function resize($file_input, $file_output, $w_o, $h_o, $percent = false) {
    3.      list($w_i, $h_i, $type) = getimagesize($file_input);
    4.      if (!$w_i || !$h_i) {
    5.          echo 'Невозможно получить длину и ширину изображения при уменьшении';
    6.          return;
    7.      }
    8.      $types = array('','gif','jpeg','png');
    9.      $ext = $types[$type];
    10.      if ($ext) {
    11.          $func = 'imagecreatefrom'.$ext;
    12.          $img = $func($file_input);
    13.      } else {
    14.          echo 'Некорректный формат файла';
    15.          return;
    16.      }
    17.      if ($percent) {
    18.          $w_o *= $w_i / 100;
    19.          $h_o *= $h_i / 100;
    20.      }
    21.      if (!$h_o) $h_o = $w_o/($w_i/$h_i);
    22.      if (!$w_o) $w_o = $h_o/($h_i/$w_i);
    23.      $img_o = imagecreatetruecolor($w_o, $h_o);
    24.      imagecopyresampled($img_o, $img, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i);
    25.      if ($type == 2) {
    26.          return imagejpeg($img_o,$file_output,100);
    27.      } else {
    28.          $func = 'image'.$ext;
    29.          return $func($img_o,$file_output);
    30.      }
    31.  }
    32. ?>
    это я когда-то нарыл когда искал как сделать кроп
    меня устраивает и по дефолту юзаю
     
  6. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Вооо уже лучше) а пример использования этой функции можно?))
     
  7. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ам , ну
    resize('урл изображения','урл нового изображения','300','','');

    получим равномерно-уменьшенный имг шириной 300пх
     
  8. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    спасибо, а при загрузке указывать на временный файл?)
     
  9. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    учи методом тыка )
    мне просто нужно было и оригинал сохранять , вот я с него и лепил
     
  10. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    img.php
    PHP:
    1. <?php
    2.  
    3. $path       = isset($_GET['p'])? $_GET['p'] : '';
    4. $newwidth   = isset($_GET['w'])? $_GET['w'] : 0;
    5. $newheight  = isset($_GET['h'])? $_GET['h'] : 0;
    6.  
    7. if (!file_exists($path))
    8.     die ("файл не обнаружен");
    9.  
    10. $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
    11.  
    12. if ($ext == 'jpg' || $ext == 'jpeg')  
    13.     $img = imagecreatefromjpeg($path);
    14. elseif ($ext == 'gif')  
    15.     $img = imagecreatefromgif($path);
    16. elseif ($ext == 'png')  
    17.     $img = imagecreatefrompng($path);
    18. else
    19.     die("Неподдерживаемый формат");
    20.  
    21. $size   = getimagesize($path);
    22. $width  = $size[0];
    23. $height = $size[1];
    24.  
    25. if (!($newwidth && $newheight)) {
    26.     if ($newwidth)
    27.         $newheight = (int)($height * ($newwidth / $width));
    28.     elseif ($newheight)
    29.         $newwidth  = (int)($width * ($newheight / $height));
    30.     else {
    31.         $newwidth  = 100;
    32.         $newheight = 100;
    33.     }
    34. }
    35. $im = imagecreatetruecolor($newwidth, $newheight);
    36.    
    37. imagecopyresized($im, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    38. header("Content-type: {$size['mime']}");
    39.        
    40. if ($ext == 'jpg' || $ext == 'jpeg') {
    41.     imagejpeg($im);
    42. }
    43. if ($ext == 'gif') {
    44.     imagegif($im);
    45. }
    46. if ($ext == 'png') {
    47.     imagepng($im);
    48. }
    49.    
    50. ?>
    применение
    HTML:
    1. <img src="img.php?p=1.jpg&w=100&h=100"/>
    или
    HTML:
    1. <img src="img.php?p=1.jpg&w=100"/>
    или
    HTML:
    1. <img src="img.php?p=1.jpg&h=100"/>
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    инвижену уже давно надо присвоить титул "мистер вопрос"
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Займись чем-то попроще, например ядерной физикой... Программирование это не твоё...
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет, он может пойти ведущим на "кто хочет стать миллионером"
     
  14. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    омг с чего не мое то) просто мне нужно через input type file загрузить только изображение и урезать) ну да мб я вопросов и задаю много глупых, но я хочу все сделать правильно и чтобы в дальнейшем ошибок не совершать)
     
  15. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    ладно спс всем что помогли) вообщем проблема с оригиналом картинки решена =)
     
  16. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Вот проблемка первая. Мне нужно скажем пережать картинку до 500px. Но вот если изображение скажем 300px то оно тянется до 500px. Желательно если 300px то так и оставить) Можно ведь как то сделать сравнение?
     
  17. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    да ты издеваешься? ман по GD в помощь ну или хотя бы глянь в код выше!
     
  18. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    аха типо того) ок отстал. спс)