Php как узнать размер изображения в пикселях

Обновлено: 04.07.2024

В этой обучающей статье мы обсудим изменение размера изображения в 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:

<?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, при этом при необходимости и сохранять пропорции.


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

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

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

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

Читайте также: