<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Обрезка изображений в PHP

Обрезка изображений в PHP

Часто приходится принимать какие-то изображения от пользователей на сайте, например, те же аватарки. Но у любого сайта есть вёрстка, которая определяет размер тех или иных изображений. И выходы за определённые пределы размеров сильно портят всю вёрстку. Поэтому тут можно либо сжать изображение, сделав его более мелким, либо обрезать. Давайте с Вами разберём обрезку изображений в PHP.

Сразу привожу код, который я написал для обрезания изображения в PHP:

<?php
  /*
  $x_o и $y_o - координаты левого верхнего угла выходного изображения на исходном
  $w_o и h_o - ширина и высота выходного изображения
  */
  function crop($image, $x_o, $y_o, $w_o, $h_o) {
    if (($x_o < 0) || ($y_o < 0) || ($w_o < 0) || ($h_o < 0)) {
      echo "Некорректные входные параметры";
      return false;
    }
    list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)
    $types = array("", "gif", "jpeg", "png"); // Массив с типами изображений
    $ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа
    if ($ext) {
      $func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
      $img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
    } else {
      echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый
      return false;
    }
    if ($x_o + $w_o > $w_i) $w_o = $w_i - $x_o; // Если ширина выходного изображения больше исходного (с учётом x_o), то уменьшаем её
    if ($y_o + $h_o > $h_i) $h_o = $h_i - $y_o; // Если высота выходного изображения больше исходного (с учётом y_o), то уменьшаем её
    $img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
    imagecopy($img_o, $img_i, 0, 0, $x_o, $y_o, $w_o, $h_o); // Переносим часть изображения из исходного в выходное
    $func = 'image'.$ext; // Получаем функция для сохранения результата
    return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
  }
  crop("image.jpg", 100, 100, 200, 50); // Вызываем функцию
?>

Я постарался тщательно прокомментировать код, поэтому, думаю, что всё с ним понятно. Конечно, в CSS есть возможность чётко задать размеры изображения, но Вы должны понимать, что глупо изображение 1600x1200 выводить с размером 160x120, так как сам файл будет грузиться очень долго, поэтому обрезание изображений в PHP может Вам пригодиться. Вдобавок, если Вам требуется не просто некая ширина, но и высота, например, 150x150, то через CSS можно сильно исказить изображение, поскольку пропорции у него могут быть другие. Поэтому и тут нам пригодится обрезка. А в одной из следующих статей мы разберём масштабирование изображений в PHP.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (12):

lev_100rus lev_100rus 16.01.2013 16:14:18

А можно просто делать проверку при добавлении аватарки и писать предупреждение, если размер аватарки больше указанной

Ответить

malina95 malina95 16.01.2013 18:41:27

Типа так? $size = '.....'; if ($image_size > $size) die("Превышен максимальный размер картинки!!!");

Ответить

malina95 malina95 16.01.2013 18:46:11

Конечно это совершенно не то что мне надо было но хоть на это полюбуюсь

Ответить

sab-ilnaz sab-ilnaz 17.01.2013 11:04:15

Это код просто обрезает изображения? А можно как то, например, изображения 4000х3000 сделать 400х300? Не обрезая и не сжимая? На РНР?

Ответить

Admin Admin 17.01.2013 15:45:01

Такого не бывает, придётся либо сжать, сохранив изображение целиком, но уменьшив размеры, либо просто обрезать изображение.

Ответить

sab-ilnaz sab-ilnaz 18.01.2013 00:34:36

Спасибо за ответ! Я думал, а может РНР умеет обрабатывать файлы на уровне байтов? Если умеет, то нужен только алгоритм сжатия. ИМХО.

Ответить

wasa1234567123698745 wasa1234567123698745 24.03.2013 22:10:17

Здравствуйте,Михаил,дайте мне код с файла functions.php ето файл из курса создание панель пользователя.Если дадите я Вам буду очень благодарен,бо етот код очень писать долго.Заранее Вам спасибо Михаил!

Ответить

Admin Admin 25.03.2013 04:14:53

Пишите на myrusakov@gmail.com и сразу сообщите там ещё название курса.

Ответить

Scar Scar 27.07.2013 12:45:51

Михаил, а как перекодировать при получении изображение из любого формата (jpg,gif) в png?

Ответить

Admin Admin 27.07.2013 17:53:33

Придется воспользоваться сторонней библиотекой для перекодирования.

Ответить

kalyan kalyan 10.12.2013 17:07:10

Михаил, нужно параллелограмм сделать. Возможно ли? Отрезать надо изображение с верхнего и нижнего краев. Получается надо отрезать наискось. Просто в работу функции не вникал.

Ответить

tikkiwiki tikkiwiki 11.12.2013 10:56:28

Николай, вникните в работу скрипта и поймете, что нет.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.