2017 © Pedro PelΓ‘ez
 

yii2-extension yii2-dynimage

Dynamic image for Yii2

image

m00nk/yii2-dynimage

Dynamic image for Yii2

  • Monday, January 15, 2018
  • by m00nk
  • Repository
  • 1 Watchers
  • 3 Stars
  • 30 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 5 Versions
  • 25 % Grown

The README.md

DynImage - ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для динамичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: - автоматичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ исходного изобраТСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² - ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ, ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ изобраТСния вэб-сСрвСром, Π±Π΅Π· запуска скриптов, (*1)

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ установлСно Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ImageMagick., (*2)

Установка

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-Ρ„Π°ΠΉΠ»ΠΎΠ², (*3)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ задания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ:, (*4)

'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, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠ³ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ., (*5)

ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ°ΠΏΠΊΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ°ΠΏΠΊΡƒ кэша) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ создаСт автоматичСски., (*6)

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

  • ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ изобраТСния ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. По Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅.
  • Ссли Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ сущСствуСт Π² ΠΏΠ°ΠΏΠΊΠ΅ кэша, Ρ‚ΠΎ вэб-сСрвСр просто ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π±Ρ€ΠΎΡƒΠ·Π΅Ρ€Ρƒ Ρ„Π°ΠΉΠ». НикакиС скрипты ΠΏΡ€ΠΈ этом Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.
  • Ссли Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ изобраТСния Π² ΠΏΠ°ΠΏΠΊΠ΅ кэша Π½Π΅Ρ‚, Ρ‚ΠΎ запрос пСрСхватываСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ этом ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ создаСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, сохраняСт Π΅Π³ΠΎ Π² кэшС ΠΈ отправляСт Π² Π±Ρ€ΠΎΡƒΠ·Π΅Ρ€.

ИспользованиС

Π•ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования: - созданиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Π·Π°Ρ€Π°Π½Π΅Π΅ извСстными Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ - созданиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с автоматичСским вычислСниСм ΡˆΠΈΡ€ΠΈΠ½Ρ‹, (*7)

CΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Π·Π°Ρ€Π°Π½Π΅Π΅ извСстными Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ URL изобраТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Ρ€Π°Π½Π΅Π΅ извСстныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ изобраТСния. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ DynImageComponent::getUrl:, (*8)

echo Html::img(
    Yii::$app->dynimage->getUrl(
        // ΠΏΡƒΡ‚ΡŒ ΠΊ исходному ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ корня сайта
        '/uploads/images/my-photo.png',

         // ΡˆΠΈΡ€ΠΈΠ½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ изобраТСния
         320,

         // высота Π±ΡƒΠ΄Π΅Ρ‚ вычислСна автоматичСски с сохранСниСм ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ
         null,

         // Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ JPEG-Ρ„Π°ΠΉΠ»
         'jpg'
    ),
    ['class' => 'css-avatar']
);

Код Π²Ρ‹ΡˆΠ΅ вставит Π½Π° страницу HTML-Ρ‚Π΅Π³ Π²ΠΈΠ΄Π°, (*9)

<img src="/assets/dynimag/uploads/images/my-photo.png=320x0x70.jpg" class="css-avatar" />

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, Π±Ρ€ΠΎΡƒΠ·Π΅Ρ€ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ запрос Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст Ρ„Π°ΠΉΠ» Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π΅Π³ΠΎ Π² Π±Ρ€ΠΎΡƒΠ·Π΅Ρ€. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… обращСниях, Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒΡΡ вэб-сСрвСром Π±Π΅Π· обращСния ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ., (*10)

CΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с автоматичСским вычислСниСм ΡˆΠΈΡ€ΠΈΠ½Ρ‹

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ изобраТСния создавались с автоматичСски вычисляСмой ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ DynImageComponent::img:, (*11)

echo Yii::$app->dynimage->img(
    // ΠΏΡƒΡ‚ΡŒ ΠΊ исходному ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ корня сайта
    '/uploads/images/my-photo.png',

     // Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ JPEG-Ρ„Π°ΠΉΠ»
     'jpg',

     // качСство Π±Π΅Ρ€Π΅ΠΌ ΠΈΠ· настроСк ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°
     null,

    ['class' => 'css-avatar']
);

Код Π²Ρ‹ΡˆΠ΅ создаст псСвдо-Ρ‚Π΅Π³ <img-dyn ... /> с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сразу послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы просканируСт всС Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅Π³ΠΈ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ HTML-Ρ‚Π΅Π³Π°ΠΌΠΈ . Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚Π΅Π³Π° Π±ΡƒΠ΄Π΅Ρ‚ вычислСна ΡˆΠΈΡ€ΠΈΠ½Π°, исходя ΠΈΠ· ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°., (*12)

ЗамСчания ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅

ΠŸΡ€ΠΈ автоматичСском вычислСнии ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ создаСт изобраТСния с ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ, ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½ΠΎΠΉ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ сторону., (*13)

НапримСр:, (*14)

Π² настройках ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ [50, 400, 1200], ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ создаст изобраТСния ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ: - 50 Ρ‚ΠΎΡ‡Π΅ΠΊ для всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² <= 50 Ρ‚ΠΎΡ‡Π΅ΠΊ - 400 Ρ‚ΠΎΡ‡Π΅ΠΊ для всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² > 50 ΠΈ <= 400 Ρ‚ΠΎΡ‡Π΅ΠΊ - 1200 Ρ‚ΠΎΡ‡Π΅ΠΊ для всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² > 400 Ρ‚ΠΎΡ‡Π΅ΠΊ, (*15)

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ nginx

Вэб-сСрвСр nginx Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ Apache, Π² частности ΠΏΡ€ΠΈ использовании настроСк ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΈΠ΄Π°, (*16)

location ~* \.(?:jpe?g|png|gif|webp|wbmp|xbm)$ {
    expires 7d;
    add_header Pragma public;
    add_header Cache-Control "public";
    gzip_vary on;
}

ΠΏΡ€ΠΈ отсутствии Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° nginx Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅! ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ использовании nginx, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΏΠΊΠ΅ кэша, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°., (*17)

The Versions

15/01 2018

dev-master

9999999-dev

Dynamic image for Yii2

  Sources   Download

MIT

The Requires

 

by Dmitrij Sheremetjev

15/01 2018

1.1.2

1.1.2.0

Dynamic image for Yii2

  Sources   Download

MIT

The Requires

 

by Dmitrij Sheremetjev

15/01 2018

1.1.1

1.1.1.0

Dynamic image for Yii2

  Sources   Download

MIT

The Requires

 

by Dmitrij Sheremetjev

26/12 2017

1.1.0

1.1.0.0

Dynamic image for Yii2

  Sources   Download

MIT

The Requires

 

by Dmitrij Sheremetjev

15/10 2016

1.0.1

1.0.1.0

Dynamic image for Yii2

  Sources   Download

MIT

The Requires

 

by Dmitrij Sheremetjev