Библиотека PHP для изменения размера, масштабирования и обрезки изображений.
Если вы не хотите обрезать, изменять размер и хранить изображения на своем сервере, Gumlet.com — это бесплатный сервис, который может обрабатывать изображения в режиме реального времени и обслуживать их по всему миру через CDN.
Этот пакет доступен через Packagist с тем же поставщиком и идентификатором пакета, что и в этом репозитории.
Если вы используете Composer, в файле composer.json
добавьте:
{
"require" : {
"gumlet/php-image-resize" : " 2.0.* "
}
}
Если вы все еще используете PHP 5.3, установите версию 1.7.0
, а если вы используете PHP 5.4, установите версию 1.8.0
этой библиотеки.
Поддержка WebP добавлена в PHP 5.6.0
, и текущая версия библиотеки поддерживает это. Если у вас возникли проблемы, используйте версию этой библиотеки 1.9.2
.
Для версий PHP >= 7.2, 2.0.1
или выше следует использовать версию этой библиотеки.
В противном случае:
include ' /path/to/ImageResize.php ' ;
Поскольку этот класс использует пространство имен, при создании экземпляра объекта вам необходимо либо использовать полное пространство имен:
$ image = new Gumlet ImageResize ();
Или псевдоним:
use Gumlet ImageResize ;
$ image = new ImageResize ();
Примечание. В этой библиотеке используется класс GD, который не поддерживает изменение размера анимированных файлов GIF.
Чтобы масштабировать изображение, в данном случае до половины его размера (масштабирование в процентах):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> save ( ' image2.jpg ' );
Чтобы изменить размер изображения по одному измерению (с сохранением соотношения сторон):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToHeight ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> save ( ' image2.jpg ' );
Чтобы изменить размер изображения в соответствии с заданной мерой независимо от его ориентации (сохраняя соотношение сторон):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToLongSide ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToShortSide ( 300 );
$ image -> save ( ' image2.jpg ' );
Чтобы изменить размер изображения так, чтобы оно наилучшим образом соответствовало заданному набору размеров (с сохранением соотношения сторон):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToBestFit ( 500 , 300 );
$ image -> save ( ' image2.jpg ' );
Все функции изменения размера имеют опцию $allow_enlarge
, для которой по умолчанию установлено значение false. Вы можете включить это, передав true
любой функции изменения размера:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 500 , 300 , $ allow_enlarge = True );
$ image -> save ( ' image2.jpg ' );
Если вы готовы самостоятельно управлять пропорциями, вы можете изменить размер напрямую:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
Это приведет к перекосу изображения, если вы не используете то же соотношение ширины и высоты, что и исходное изображение.
Чтобы обрезать изображение:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
Это позволит масштабировать изображение как можно ближе к переданным размерам, а затем обрезать и центрировать остальное.
В приведенном выше примере изображение размером 400 × 600 пикселей будет уменьшено до 200 × 300 пикселей, а затем 50 пикселей будет удалено сверху и снизу, в результате чего у вас останется 200 × 200 пикселей.
Режимы обрезки:
Доступно несколько вариантов режима обрезки, чтобы вы могли выбрать, как вы хотите обрабатывать возможное превышение ширины или высоты после изменения размера изображения. По умолчанию используется режим обрезки CROPCENTER
. В результате эти фрагменты кода эквивалентны:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPCENTER );
$ image -> save ( ' image2.jpg ' );
Если у вас есть изображение размером 400 × 600 пикселей и вы хотите обрезать его до 200 × 200 пикселей, размер изображения будет уменьшен до 200 × 300 пикселей, тогда вы можете указать, как вы хотите обрабатывать эти 100 пикселей, превышающие значение обрезки. режим, который вы хотите использовать.
Например, при использовании режима обрезки CROPTOP
будет удалено 100 пикселей снизу, и у вас останется 200 × 200 пикселей.
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPTOP );
$ image -> save ( ' image2.jpg ' );
Напротив, использование режима обрезки CROPBOTTOM
приведет к удалению 100 пикселей сверху, и у вас останется 200 пикселей × 200 пикселей.
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPBOTTOM );
$ image -> save ( ' image2.jpg ' );
Свободное выращивание:
Существует также способ определить произвольное положение обрезки. Вы можете определить $x и $y в методе freecrop
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> freecrop ( 200 , 200 , $ x = 20 , $ y = 20 );
$ image -> save ( ' image2.jpg ' );
Чтобы загрузить изображение из строки:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
$ image -> save ( ' image.jpg ' );
Вы также можете вернуть результат в виде строки:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
echo $ image -> getImageAsString ();
Также поддерживается магия __toString()
:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> resize ( 10 , 10 );
echo ( string ) $ image ;
Как показано выше, вы можете вызвать $image->save('image.jpg');
Чтобы отобразить изображение непосредственно в браузере, вы можете вызвать $image->output()
;
При сохранении на диск или выводе в браузер сценарий предполагает тот же тип вывода, что и ввод.
Если вы хотите сохранить/вывести изображение другого типа, вам необходимо передать (поддерживаемую) константу PHP IMAGETYPE_
*:
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
Это позволяет вам сохранить тип, отличный от исходного:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image.png ' , IMAGETYPE_PNG );
Свойства $quality_jpg
, $quality_webp
и $quality_png
доступны для настройки:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> quality_jpg = 100 ;
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
По умолчанию они установлены на 85 и 6 соответственно. Дополнительную информацию смотрите в руководствах для imagejpeg()
и imagepng()
.
Вы также можете передать качество непосредственно методам save()
, output()
и getImageAsString()
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' , null , 100 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> output ( IMAGETYPE_PNG , 4 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ result = $ image -> getImageAsString ( IMAGETYPE_PNG , 4 );
В приведенном выше примере мы передаем null
для типа изображения, чтобы пропустить его и обеспечить качество. В этом случае предполагается, что тип изображения совпадает с типом входных данных.
По умолчанию чересстрочная развертка изображений включена. Его можно отключить, установив для $interlace
значение 0
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> interlace = 0 ;
$ image -> save ( ' image2.jpg ' );
При выполнении операций исходное изображение сохраняется, что позволяет цеплять операции без чрезмерного разрушения.
Это полезно для создания нескольких размеров:
$ image = new ImageResize ( ' image.jpg ' );
$ image
-> scale ( 50 )
-> save ( ' image2.jpg ' )
-> resizeToWidth ( 300 )
-> save ( ' image3.jpg ' )
-> crop ( 100 , 100 )
-> save ( ' image4.jpg ' )
;
ImageResize выдает собственное исключение ImageResizeException в случае ошибок. Вы можете уловить это или уловить общее исключение Exception, которое оно расширяет.
Этого не следует ожидать, но если что-то пойдет не так на полпути, тогда могут появиться уведомления или предупреждения об ошибках из PHP GD и функций изображения (http://php.net/manual/en/ref.image.php).
try {
$ image = new ImageResize ( null );
echo " This line will not be printed " ;
} catch ( ImageResizeException $ e ) {
echo " Something went wrong " . $ e -> getMessage ();
}
Вы можете применить специальные эффекты к новому изображению, например размытие или добавить баннер.
$ image = new ImageResize ( ' image.jpg ' );
// Add blure
$ image -> addFilter ( function ( $ imageDesc ) {
imagefilter ( $ imageDesc , IMG_FILTER_GAUSSIAN_BLUR );
});
// Add banner on bottom left corner
$ image18Plus = ' banner.png '
$ image -> addFilter ( function ( $ imageDesc ) use ( $ image18Plus ) {
$ logo = imagecreatefrompng ( $ image18Plus );
$ logo_width = imagesx ( $ logo );
$ logo_height = imagesy ( $ logo );
$ image_width = imagesx ( $ imageDesc );
$ image_height = imagesy ( $ imageDesc );
$ image_x = $ image_width - $ logo_width - 10 ;
$ image_y = $ image_height - $ logo_height - 10 ;
imagecopy ( $ imageDesc , $ logo , $ image_x , $ image_y , 0 , 0 , $ logo_width , $ logo_height );
});
Переворачивает изображение, используя заданный режим. Этот метод предназначен только для версии PHP 5.4.
$ flip = new ImageResize ( ' image.png ' );
$ image = imagecreatetruecolor ( 200 , 100 );
$ image -> addFilter ( function ( $ image ) {
imageflip ( $ image , IMG_FLIP_HORIZONTAL );
});
Обе функции будут использоваться в том порядке, в котором они были добавлены.
Вы можете включить гамма-коррекцию цвета, которая по умолчанию отключена.
$ image = new ImageResize ( ' image.png ' );
$ image -> gamma ( true );
https://gumlet.github.io/php-image-resize/index.html
Эта библиотека поддерживается Gumlet.com.