Php как узнать размер изображения в пикселях
В этой обучающей статье мы обсудим изменение размера изображения в PHP.
Загрузите изображение перед изменением размера
Прежде чем изменять размер изображения, мы должны сначала загрузить его как ресурс изображения в скрипте. Это не то же самое, что использование таких функций, как file_get_contents() для получения содержимого файла изображения. Чтобы загрузить файл, нам нужно использовать такие функции, как imagecreatefromjpeg() , imagecreatefrompng() и imagecreatefromgif() , среди других. В зависимости от типа изображения, размер которого мы будем изменять, мы будем соответственно использовать другую функцию.
getimagesize () в PHP
После загрузки изображения мы используем getimagesize() для вычисления ширины, высоты и типа входного изображения. Эта функция возвращает список элементов, где ширина и высота изображения хранятся с индексами 0 и 1 соответственно, а константы IMAGETYPE_XXX хранятся с индексом 2. Мы будем использовать значение этой возвращенной константы, чтобы выяснить, что тип изображения и функции.
Оба являются одними и теми же изображениями, потому что в этом разделе мы загружаем только изображение и вычисляем размер исходного изображения.
imagecopyresized() в PHP
imagecopyresized() берет продолговатую область шириной src_w и высотой src_h из src_image в позиции (src_x, src_y) и помещает ее в прямоугольную область целевого изображения в позиции (dst_x, dst_y) . Это встроенная функция PHP.
Он возвращает логическое значение ИСТИНА в случае успеха или ЛОЖЬ в случае неудачи.
imagecopyresampled() в PHP
imagecopyresampled () копирует продолговатую часть одного изображения в другое, плавно интерполируя значения пикселей, чтобы уменьшить размер изображения, сохраняя высокий уровень четкости.
Он работает аналогично функции imagecopyresized() с дополнительным преимуществом выборки изображения в дополнение к его изменению размера.
Примечание: мы также можем выполнить пропорциональную передискретизацию, что возможно, задав ширину и высоту dest_image вместо процента.
imagescale () в PHP
Вы указываете размер, а не определяете ширину или высоту последнего изображения. Если вы хотите, чтобы размер нового изображения составлял половину от первого изображения, установите размер 0,8. Вот пример кода для масштабирования изображения с заданным коэффициентом при сохранении соотношения.
Умножаем исходную ширину и высоту изображения на указанный масштаб в функции scale image() .
Помимо этого, PHP имеет встроенную функцию, которая позволяет масштабировать изображение до указанной ширины и высоты.
У меня несколько вопросов. 1 - зачем выводя тип изображения, выявляя массив $flag, включать в массив $size. Если и так тип заведомо указан в переменной $flag? 2 - Почему ширина и высота выявляется значениями [0] и [1], чем это объясняется?
Ну во-первых здесь нет переменной flag - это массив! Функция getimagesize() - это встроенная функция PHP, она возвращает массив свойств изображения, которое было предложено в функции, как аргумент, т.е. путь до изображения. У этой функции есть определённый порядок вывода значений, точнее у массива, который она возвращает. Как известно массив содержит значения которые в свою очередь имеют ключи, эти ключи начинают свой отсчёт с нуля. Значение массива с ключом ноль - содержит всегда ширину изображения, с ключом 1 - высоту, с ключом 2 - содержит число, которое идентифицируется, как-то, что показано в массиве flag (расширение). Здесь используется вложенность массивов. Если не вкладывать массив size[2] в массив flag[], то просто не увидим расширение картинки.
В данном примере массив $size[2] содержит цифру 3, а массив flag[3] - содержит расширение PNG если из массива flag[3] убрать число 3 и вставить массив $size[2] (flag[$size[2]]), то получим то-же самое, потому что после отработки скрипта в массиве flag останется число 3, т.е значение массива size[2].
то есть получается у массива функции getimagesize() может иметь только 4 значения (ширина, высота, расширение, "ширина и высота")? и зачем кстати тут "ширина и высота"? если эти данные и так указываются первыми двумя ключами? И второе. То что это массив это я понял, но почему его имя начинается со знака доллара? Я думал, что это переменная имеющая в значении - массив. То есть переменная $flag = массив.
Есть справочники по всем функциям PHP, где они все расписаны. Ширина и высота зачем? Например динамически вставлять одну переменную в тег img, а не городить целую строку из отдельно взятых свойств. Почему $? Потому что любой массив и переменная пишется со знаком $, только функция без него. Массив это по сути та же переменная, которая имеет своё внутреннее устройство, называемое стек массива. Я представляю массив как тумбочку или комод с ящиками, каждый ящик имеет свой номер - это ключ массива и в каждом ящике что-то лежит - это значения определённого ключа массива, а сам комод и есть массив. Это конечно всё аллегория, хотя и очень правдоподобная.
А вы уверены, что функция getimagesize() зависит от библиотеки GD? Откуда вы это взяли?
Далее представлены примеры как изменить размер, вырезать часть изображения и т.д. Все примеры универсальные и работают с разными типами файлов без изменений кода, у PNG файлов сохраняется прозрачность.
Открытие изображения
Итак, есть исходное изображение PNG 400x400px:
С помощью функции getimagesize() получим ширину, высоту и тип, далее откроем его функциями в зависимости от типа:
Изменение размера изображения (resize)
Приведенный код уменьшает или увеличивает изображение не искажая его пропорции.
Результат
$w = 200; $h = 0; | $w = 200; $h = 100; | $w = 100; $h = 200; |
Обрезать изображение (crop)
Пример вырезает из исходного изображения часть размером $w на $h .
$x и $y задают начальные координаты в пикселях или процентах.
Результат
Поворот изображения
Функция imagerotate() поворачивает изображение на заданный угол против часовой стрелки, отрицательный угол меняет направление поворота.
Поворот на не ровный угол увеличит ширину и высоту фото:
Зеркальное отражение
Imageflip() зеркалит изображение, могут быть следующие параметры:
IMG_FLIP_HORIZONTAL | По горизонтали |
IMG_FLIP_VERTICAL | По вертикали |
IMG_FLIP_BOTH | По горизонтали и вертикали |
Наложение водяного знака (watermark)
Для защиты на картинки наносят копирайт, например, данный скрип накладывает картинку watermark.jpg на основное изображение:
Результат
Добавление фона
Актуально для PNG с прозрачностью. Скрипт вставит на задний фон картинку с положением $x и $y . Размер основного изображения не изменится.
Фон | Результат |
Фильтры
Функция imagefilter() применяет фильтр к изображению.
В параметре $filtertype указывается константа применяемого фильтра, а в следующих его настройки.
В предыдущей статье я рассказал, как обрезать изображение на PHP. В этой же статье я расскажу, как масштабировать изображение на PHP, то есть либо сжать, либо растянуть.
Давайте сразу приведу код функции масштабирования изображения на PHP:
<?php
/*
$w_o и h_o - ширина и высота выходного изображения
*/
function resize($image, $w_o = false, $h_o = false) if (($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;
>
/* Если указать только 1 параметр, то второй подстроится пропорционально */
if (!$h_o) $h_o = $w_o / ($w_i / $h_i);
if (!$w_o) $w_o = $h_o / ($h_i / $w_i);
$img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
imagecopyresampled($img_o, $img_i, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i); // Переносим изображение из исходного в выходное, масштабируя его
$func = 'image'.$ext; // Получаем функция для сохранения результата
return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
>
/* Вызываем функцию с целью уменьшить изображение до ширины в 100 пикселей, а высоту уменьшив пропорционально, чтобы не искажать изображение */
resize("image.jpg", 100); // Вызываем функцию
?>
Вот такая полезная и простая функция легко позволяет сжимать и растягивать изображения на PHP, при этом при необходимости и сохранять пропорции.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Читайте также: