Как сделать нарезку изображений для новостей с помощью PHP

нарезка изображений! В сети существует огромное количество решений по масштабированию изображений. Очень подробно рассматривается работа с изображениями и в документации по PHP (масштабирование) Но вопросы, по-видимому остаются, потому набросал частное решение для создания одинаковых картинок на основе разноразмерных изображений. Внимание! Используйте этот код на рабочем сервере на свой страх и риск (теперь понимаю почему эту фразу любят все разработчики - снятие ответственности за возможные просчеты или неумелое обращение с кодом).

Заметка рассчитана на начинающего PHP-программиста и призвана скорее заинтересовать в поиске решений, нежели предоставить готовый для использования вариант кода("удочка, а не рыба").

  1. //устанавливаем нужные размеры новой картинки
  2. define("IMG_WIDTH", 210);
  3. define("IMG_HEIGHT", 150);
  4.  
  5. //находим изображение
  6. $src1 = "http://img15.nnm.ru/2/0/f/0/5/657bdf2ff74ad10cf8b0e35802c.jpg";
  7. $src2 = "http://www.gorodlgov.ru/upload/images/news/251455465514.jpg";
  8. $src3 = "http://img0.liveinternet.ru/images/attach/c/1/74/2/74002466_4059800_plakati3.jpg";
  9. $src4 = "http://cs11214.vkontakte.ru/u7520955/139750135/z_2315b6cd.jpg";
  10.  
  11. // грузим
  12. $img = imageCreateFromjpeg($src4);
  13.  
  14. //берем координаты
  15. $width = imagesx($img);
  16. $height= imagesx($img);
  17.  
  18. //проверяем пропорцию
  19. if($width/IMG_WIDTH > $height/IMG_HEIGHT){
  20. $new_height = $height;
  21. $new_width = ($height*IMG_WIDTH)/IMG_HEIGHT;
  22. } else{
  23. $new_width = $width;
  24. $new_height = ($width*IMG_HEIGHT)/IMG_WIDTH;
  25. }
  26.  
  27. //добавляем коэффициент масштабирования
  28. $k = 0.7;
  29.  
  30. //копируем и одновременно меняем размер изображения
  31. $thumb = imagecreatetruecolor(IMG_WIDTH, IMG_HEIGHT);
  32. imagecopyresized($thumb, $img, 0, 0, 0, 0, IMG_WIDTH, IMG_HEIGHT, $new_width*$k , $new_height*$k);
  33.  
  34.  
  35. imagejpeg($thumb, "res.jpg", 100);

При масштабировании изображения нужно учесть:

  • при обработке маленьких изображений, результирующая картинка получится пикселизированной (будет увеличена с потерей качества).

На эту тему можно посмотреть заметку

(оригинал изображения взят здесь)