Я строю конструктор миниатюр с 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
(Unsharpen), gblr
(размытие по Гауссу) и так далее.
Похоже, ссылаясь на setParameter()
метод несколько раз не работает так, как я хочу (или как должен).
Есть ли способ объединить разные фильтры, используя подход ОО?
Неважно, я решил это, изменив основную логику. Вызов setParameter()
метод из цикла со всеми операциями, сохраненными в формате массива, исправил мою проблему.
Других решений пока нет …