PHPUnit | PHP-CS-фиксатор | Покрытие | Загрузки | Выпускать |
---|---|---|---|---|
Этот пакет предоставляет набор инструментов абстракции манипулирования изображениями для проектов на основе Symfony.
Наборы фильтров: Используя любой язык конфигурации, поддерживаемый Symfony (например, YML и XML), вы можете создавать определения наборов фильтров , которые определяют процедуры преобразования. Эти определения включают в себя набор фильтров и постпроцессоров , а также другие необязательные параметры.
Фильтры. Преобразования изображений применяются с помощью фильтров . В комплекте поставляется набор встроенных фильтров, реализующих наиболее распространенные преобразования; примеры включают миниатюру, масштабирование, обрезку, переворот, полосу и водяной знак. Для более сложных преобразований вы можете легко создавать свои собственные фильтры.
Постпроцессоры: модификация результирующего двоичного файла изображения (созданного на основе ваших фильтров ) обрабатывается постпроцессорами . Примеры: JPEG Optim, Moz JPEG, Opti PNG и PNG Quant. Как и в случае с фильтрами, вы можете легко создавать свои собственные постпроцессоры.
Предположим, вы определили набор фильтров my_thumb
, который можно настроить для выполнения любого количества различных преобразований. Самый простой вызов — передать путь вашего изображения к предоставленному фильтру imagine_filter
Twig.
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' ) }} " />
Этот проект выпущен с Кодексом поведения участника. Участвуя в этом проекте, вы соглашаетесь соблюдать его условия.
Спасибо многочисленным участникам, которые посвятили свое время и код этому проекту.
В этом пакете для преобразования изображений используется автономная библиотека PHP Imagine.
Этот пакет был ответвлен от AvalancheImagineBundle с целью сделать код более расширяемым. Дополнительную информацию о причинах этого разветвления можно найти в AvalancheImagineBundle#25.
Использование этого пакета аналогично использованию всех пакетов Symfony. Необходимо выполнить следующие шаги
Подробные инструкции по настройке можно найти в главе «Установка» документации.
Подробную информацию обо всех доступных вариантах конфигурации можно найти в главе конфигурации документации.
Как правило, этот пакет работает путем применения наборов фильтров к изображениям из шаблона. Наборы фильтров определяются в файле конфигурации приложения (часто app/config/config.yml
) и состоят из набора фильтров , постпроцессоров и других дополнительных параметров.
Мы узнаем больше о постпроцессорах и других доступных параметрах позже, а сейчас давайте сосредоточимся на том, как определить простой набор фильтров , состоящий из нескольких фильтров .
Прежде чем мы начнем, необходимо выполнить небольшую настройку, чтобы обеспечить правильную работу наших загрузчиков данных и преобразователей кэша. Используйте следующий шаблон в файле конфигурации.
# app/config/config.yml
liip_imagine :
# configure resolvers
resolvers :
# setup the default resolver
default :
# use the default web path
web_path : ~
# your filter sets are defined here
filter_sets :
# use the default cache configuration
cache : ~
Имея базовую конфигурацию, мы начнем с примера, который соответствует обычному варианту использования: созданию миниатюр. Предположим, мы хотим, чтобы к полученным миниатюрам были применены следующие преобразования:
В дополнение к нашему шаблону, описанному выше, нам нужно определить набор фильтров (который мы назовем my_thumb
) с двумя настроенными фильтрами : фильтрами thumbnail
и background
фильтрами .
# app/config/config.yml
liip_imagine :
resolvers :
default :
web_path : ~
filter_sets :
cache : ~
# the name of the "filter set"
my_thumb :
# adjust the image quality to 75%
quality : 75
# list of transformations to apply (the "filters")
filters :
# create a thumbnail: set size to 120x90 and use the "outbound" mode
# to crop the image when the size ratio of the input differs
thumbnail : { size : [120, 90], mode : outbound }
# create a 2px black border: center the thumbnail on a black background
# 4px larger to create a 2px border around the final image
background : { size : [124, 94], position : center, color : '#000000' }
Теперь вы создали набор фильтров под названием my_thumb
, который выполняет преобразование миниатюр. Фильтр thumbnail
изменяет размер изображения до нужной ширины и высоты (в данном примере 120x90 пикселей), а его параметр mode: outbound
приводит к обрезке результирующего изображения, если соотношение входных данных отличается. background
фильтр создает черную рамку толщиной 2 пикселя, создавая черный холст размером 124x94 пикселя и помещая миниатюру в его центр.
Примечание. Для набора фильтров может быть определено любое количество фильтров . Для простых преобразований может потребоваться только один фильтр , тогда как для сложных преобразований может быть определено неограниченное количество фильтров .
Существует ряд дополнительных фильтров, но на данный момент вы можете использовать новый набор фильтров my_thumb
непосредственно в шаблоне.
Для шаблона на основе Twig используйте:
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' ) }} " />
Или, для шаблона на основе PHP, используйте:
<img src=" <?php $ this ['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb') ?> " />
За кулисами пакет применяет фильтры к изображению «на лету», когда обслуживается первый запрос страницы. Преобразованное изображение затем кэшируется для последующих запросов. Окончательный путь к кэшированному изображению будет аналогичен /media/cache/my_thumb/relative/path/to/image.jpg
.
Примечание. *Используя среду dev
, вы можете обнаружить, что изображения не отображаются должным образом с помощью помощника по шаблонам. Это часто вызвано включением intercept_redirect
в конфигурации вашего приложения. Чтобы обеспечить рендеринг изображений, настоятельно рекомендуется отключить эту опцию:
# app/config/config_dev.yml
web_profiler :
intercept_redirects : false
Иногда у вас может быть определен фильтр, который соответствует 99% ваших сценариев использования. Вместо определения нового фильтра для ошибочного 1% случаев вы можете изменить поведение фильтра во время выполнения, передав помощнику шаблона массив параметров.
Для шаблона на основе Twig используйте:
{% set runtimeConfig = { " thumbnail " : { " size " : [ 50 , 50 ] }} %}
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' , runtimeConfig ) }} " />
Или, для шаблона на основе PHP, используйте:
<?php
$ runtimeConfig = array (
" thumbnail " => array (
" size " => array ( 50 , 50 )
)
);
?>
<img src=" <?php $ this [ ' imagine ' ]-> filter ( ' /relative/path/to/image.jpg ' , ' my_thumb ' , $ runtimeConfig ) ?> " />
Иногда вам нужно разрешить путь к изображению, возвращаемый этим пакетом, для отфильтрованного изображения. Этого можно легко достичь с помощью двоичного файла консоли Symfony или программно из контроллера или другого фрагмента кода.
Вы можете разрешить URL-адрес изображения с помощью консольной команды liip:imagine:cache:resolve
. Единственный обязательный аргумент — один или несколько относительных путей к изображениям (которые должны быть разделены пробелом).
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg relative/path/to/image2.jpg
Кроме того, вы можете использовать параметр --filter
, чтобы указать, какой фильтр вы хотите разрешить (если параметр --filter
опущен, будут разрешены все доступные фильтры).
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg --filter=my_thumb
Вы можете разрешить URL-адрес изображения в своем коде, используя метод getBrowserPath
службы liip_imagine.cache.manager
. Предполагая, что у вас уже есть служба, назначенная переменной $imagineCacheManager
, вы должны запустить:
$ imagineCacheManager -> getBrowserPath ( ' /relative/path/to/image.jpg ' , ' my_thumb ' );
Часто вам необходимо выполнить эту операцию в контроллере. Предполагая, что ваш контроллер унаследован от базового контроллера Symfony, вы можете воспользоваться унаследованным методом get
для запроса службы liip_imagine.cache.manager
, из которой вы можете вызвать getBrowserPath
по относительному пути к изображению, чтобы получить его определенное местоположение.
/** @var CacheManager */
$ imagineCacheManager = $ this -> get ( ' liip_imagine.cache.manager ' );
/** @var string */
$ resolvedPath = $ imagineCacheManager -> getBrowserPath ( ' /relative/path/to/image.jpg ' , ' my_thumb ' );
Этот пакет предоставляет набор встроенных фильтров, и вы также можете легко определить свои собственные фильтры. См. главу о фильтрах в нашей документации.
Если вам нужно использовать определенные «наборы фильтров» внутри вашего контроллера, вы можете получить FilterService этого пакета из сервисного контейнера, чтобы сделать за вас тяжелую работу.
<?php
class MyController extends Controller
{
public function indexAction ()
{
/** @var FilterService */
$ imagine = $ this
-> container
-> get ( ' liip_imagine.service.filter ' );
// 1) Simple filter, OR
$ resourcePath = $ imagine -> getUrlOfFilteredImage ( ' uploads/foo.jpg ' , ' my_thumb ' );
// 2) Runtime configuration
$ runtimeConfig = [
' thumbnail ' => [
' size ' => [ 200 , 200 ]
],
];
$ resourcePath = $ imagine -> getUrlOfFilteredImageWithRuntimeFilters (
' uploads/foo.jpg ' ,
' my_thumb ' ,
$ runtimeConfig
);
// ..
}
}
?>
По умолчанию каталог web/
Symfony зарегистрирован как корень данных для загрузки ресурсов. Для многих установок этого будет достаточно, но иногда вам может потребоваться загрузить изображения из других мест. Для этого вам необходимо установить параметр data_root
в вашей конфигурации (часто он находится в app/config/config.yml
).
liip_imagine :
loaders :
default :
filesystem :
data_root : /path/to/source/images/dir
Начиная с версии 1.7.2
вы можете зарегистрировать несколько корневых путей к данным, и локатор файлов будет искать запрошенный файл в каждом из них.
liip_imagine :
loaders :
default :
filesystem :
data_root :
- /path/foo
- /path/bar
Начиная с версии 1.7.3
вы запрашиваете автоматическую регистрацию путей к общедоступным ресурсам из всех зарегистрированных пакетов в качестве корней данных. Это позволяет загружать ресурсы из Resources/public
папок, которые находятся в загруженных пакетах. Чтобы включить эту функцию, установите для параметра конфигурации bundle_resources.enabled
значение true
.
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
Если вы хотите зарегистрировать некоторые из Resource/public
папок, но не все, вы можете сделать это, занеся в черный список пакеты, которые вы не хотите регистрировать, или включив в белый список пакеты, которые вы хотите зарегистрировать. Например, чтобы внести в черный список (не зарегистрировать) пакеты «FooBundle» и «BarBundle», вам следует использовать следующую конфигурацию.
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
access_control_type : blacklist
access_control_list :
- FooBundle
- BarBundle
В качестве альтернативы, если вы хотите внести в белый список (только зарегистрировать) пакеты «FooBundle» и «BarBundle», вы можете использовать следующую конфигурацию.
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
access_control_type : whitelist
access_control_list :
- FooBundle
- BarBundle
Местоположение изображений должно быть доступно для чтения вашему веб-серверу. В системе, поддерживающей setfacl
(например, Linux/BSD), используйте
HTTPDUSER= ` ps axo user,comm | grep -E ' [a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx ' | grep -v root | head -1 | cut -d -f1 `
sudo setfacl -R -m u: " $HTTPDUSER " :rwX -m u: ` whoami ` :rwX /path/to/source/images/dir
sudo setfacl -dR -m u: " $HTTPDUSER " :rwX -m u: ` whoami ` :rwX /path/to/source/images/dir
См. документацию по разрешениям Symfony для получения информации о командах, совместимых с macOS и другими средами.
Вам необходимо предоставить доступ на чтение для Apache, добавив следующее в конфигурацию Apache VHost:
< VirtualHost *:80>
<!-- Rest of directives like DocumentRoot or ServerName -->
Alias /FavouriteAlias /path/to/source/images/dir
< Directory " /path/to/source/images/dir " >
AllowOverride None
Allow from All
</ Directory >
</ VirtualHost >
Альтернативно вы можете поместить директиву в отдельный файл вашего проекта и включить ее в конфигурацию Apache VHost. Например, вы можете создать файл app/config/apache/photos.xml
и добавить в файл VHost следующее:
< VirtualHost *:80>
<!-- Rest of directives like DocumentRoot or ServerName -->
Include "/path/to/your/project/app/config/apache/photos.xml"
</ VirtualHost >
Этот метод сохраняет файл вместе с остальной частью вашего кода, что позволяет вам легко изменять его или создавать различные файлы конфигурации, зависящие от среды.
После правильной настройки Apache относительный путь к изображению со следующим абсолютным путем /path/to/source/images/dir/logo.png
должен быть /FavouriteAlias/logo.png
.
Более подробную информацию о возможностях этого пакета смотрите в документации.