Я создаю конструктор миниатюр с помощью phpThumb (реализация Джеймса Генриха доступна здесь). По сути, я инкапсулирую класс phpThumb
для создания миниатюр с таким синтаксисом:
$thumbnail = \Helpers\Images::getThumbnail("/assets/images/sample.png", [
"width" => 150,
"filters" => [
"grayscale"
]
]);
Это проверяет, существует ли изображение, для которого я запрашиваю миниатюру с заданным набором опций и фильтров, и, если это так, оно просто дает мне URL-адрес этого ресурса. Если это не так, он обрабатывает изображение, сохраняет полученную миниатюру и дает мне URL-адрес этого вновь созданного ресурса.
Все идет нормально. Моя проблема возникает, когда я пытаюсь добавить более одного фильтра следующим образом:
$thumbnail = \Helpers\Images::getThumbnail("/assets/images/sample.png", [
"width" => 150,
"filters" => [
"blur" => 25,
"grayscale"
]
]);
Внутренне я делаю так:
/**
* more filter cases here
*/
} elseif ($filter === "blur") {
if (!empty($parameters)) {
if (sizeof($parameters === 1)) {
$value = current($parameters);
if (is_numeric($value)) {
if ($value >= 0) {
if ($value <= 25) {
$phpthumb->setParameter("fltr", implode("|", [
$filters[$filter],
$value
]));
}
}
}
}
}
} elseif ($filter === "brightness") {
/**
* more filter cases here
*/
$filters[$filter]
— это просто ассоциативный массив с различными кодами операций фильтра, такими как usm
(нерезкость), gblr
(размытие по Гауссу) и так далее.
Похоже, что многократный вызов метода setParameter()
не работает так, как я хочу (или должен).
Есть ли способ сложить разные фильтры вместе, используя подход OO?