m00nk/yii2-dynimage
Composer 安装命令:
composer require m00nk/yii2-dynimage
包简介
Dynamic image for Yii2
README 文档
README
Задачи компонента:
- автоматически создавать уменьшенные копии исходного изображения требуемых размеров
- при повторном обращении, отдавать изображения вэб-сервером, без запуска скриптов
Внимание! Для работы должно быть установлено расширение ImageMagick.
Установка
composer require m00nk/dynimage
Настройка приложения
'componemts' => [
...
'dynimage' => [
'class' => 'm00nk\dynimage\DynImageComponent',
],
...
'urlManager' => [
...
'rules' => [
...
'assets/dynimg/<filepath:.+>' => 'dynimage/get-image'
]
],
...
],
'controllerMap' => [
...
'dynimage' => [
'class' => 'm00nk\dynimage\controllers\ProcessController'
],
...
]
Компонент имеет несколько параметров:
- cachePath - путь относительно корня сайта к папке кэша изображений. По-умолчанию '/assets/dynimg'. Эта папка должна быть доступна из броузера.
- sizes - массив допустимых размеров изображений (ширина). Используется только при автоматическом определении ширины.
- jpegQuality - уровень качества для JPEG-файлов
Пример задания параметров через конфигурацию:
'componemts' => [
...
'dynimage' => [
'class' => 'm00nk\dynimage\DynImageComponent',
'jpegQuality' => 60,
'sizes' => [50, 200, 800, 1400],
'cachePath' => '/uploads/images/cache',
'engineClass' => \Imagine\Gmagick\Imagine::class, // меняем графический движок
],
...
'urlManager' => [
...
'rules' => [
...
'uploads/images/cache/<filepath:.+>' => 'dynimage/get-image'
]
],
...
]
...
Обратите внимание, что при смене папки кэша, нужно менять и правило в UrlManager, чтобы компонент мог правильно перехватывать запросы к несуществующим файлам.
Все необходимые для работы папки (включая папку кэша) компонент создает автоматически.
Принцип работы
- параметры изображения кодируются в имени файла. По ним компонент может определить, что именно нужно получить в результате.
- если требуемое изображение уже существует в папке кэша, то вэб-сервер просто отдает броузеру файл. Никакие скрипты при этом не запускаются.
- если требуемого изображения в папке кэша нет, то запрос перехватывается приложением. При этом компонент создает требуемое изображение, сохраняет его в кэше и отправляет в броузер.
Использование
Есть два варианта использования:
- создание изображений с заранее известными размерами
- создание изображений с автоматическим вычислением ширины
Cоздание изображений с заранее известными размерами
Компонент позволяет получить URL изображения, используя заранее известные параметры результирующего изображения. Для этого используется
метод DynImageComponent::getUrl:
echo Html::img( Yii::$app->dynimage->getUrl( // путь к исходному изображению относительно корня сайта '/uploads/images/my-photo.png', // ширина результирующего изображения 320, // высота будет вычислена автоматически с сохранением пропорций null, // на выходе получим JPEG-файл 'jpg' ), ['class' => 'css-avatar'] );
Код выше вставит на страницу HTML-тег вида
<img src="/assets/dynimag/uploads/images/my-photo.png=320x0x70.jpg" class="css-avatar" />
При первом обращении к файлу, броузер перенаправит запрос в компонент, который создаст файл требуемого размера и отправит его в броузер. При последующих обращениях, файл будет отдаваться вэб-сервером без обращения к компоненту.
Cоздание изображений с автоматическим вычислением ширины
Если необходимо, чтобы изображения создавались с автоматически вычисляемой шириной, нужно использовать метод DynImageComponent::img:
echo Yii::$app->dynimage->img( // путь к исходному изображению относительно корня сайта '/uploads/images/my-photo.png', // на выходе получим JPEG-файл 'jpg', // качество берем из настроек компонента null, ['class' => 'css-avatar'] );
Код выше создаст псевдо-тег <img-dyn ... /> с необходимыми параметрами и загрузит JavaScript, который сразу после загрузки страницы просканирует все
такие теги и заменит их соответствующими HTML-тегами . Для каждого такого тега будет вычислена ширина, исходя из ширины контейнера.
Замечания по работе
При автоматическом вычислении ширины компонент создает изображения с шириной, округленной в большую сторону.
Например:
в настройках указаны размеры [50, 400, 1200], компонент создаст изображения шириной:
- 50 точек для всех контейнеров <= 50 точек
- 400 точек для всех контейнеров > 50 и <= 400 точек
- 1200 точек для всех контейнеров > 400 точек
Особенности nginx
Вэб-сервер nginx работает немного отлично от Apache, в частности при использовании настроек кэширования вида
location ~* \.(?:jpe?g|png|gif|webp|wbmp|xbm)$ {
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
gzip_vary on;
}
при отсутствии требуемого файла nginx не будет запускать приложение! Поэтому, при использовании nginx, нужно отключить кэширование файлов изображений в папке кэша, заданной в параметрах компонента.
m00nk/yii2-dynimage 适用场景与选型建议
m00nk/yii2-dynimage 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 176 次下载、GitHub Stars 达 3, 最近一次更新时间为 2016 年 09 月 29 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 m00nk/yii2-dynimage 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 m00nk/yii2-dynimage 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 176
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-09-29