使用image library,我想知道是否可以将部分对象链存储在变量中(然后可以驻留在数据库中)并在之后再次使用它。我不确定它是否以这种方式调用,但没有找到其他信息。
我想要完成的事情:
$extra = "fit(800, 500, null)->limitColors(5, '#ff9900')->invert()";
$image = $manager->make($source)->$extra;
echo $image->response('jpg', 85);
要获得此结果:
$image = $manager->make($source)->fit(800, 500, null)->limitColors(5, '#ff9900')->invert();
echo $image->response('jpg', 85);
答案 0 :(得分:0)
好的,你不能将"fit(800, 500, null)->limitColors(5, '#ff9900')->invert()";
存储在一个变量中。如果将它存储在变量中,它将被视为字符串,并且不返回任何内容。如果您希望它返回您想要的内容,则需要$manager
实例和make()
方法的帮助。因此,您只能将此部分fit(800, 500, null)->limitColors(5, '#ff9900')->invert()
存储在变量中并使用它。
$source = $manager->make($source);
$added_extra = $source->fit(800, 500, null)->limitColors(5, '#ff9900')->invert();
$image = $added_extra->response('jpg', 85);
echo $image;
答案 1 :(得分:0)
如果不这样做,你会更好(更清晰的代码,更容易重复使用)。如果您需要一遍又一遍地执行此操作,您可能需要创建一个函数:
$image = $manager->make($source)->$extra;
echo editImage($image)->response('jpg', 85);
function editImage(\Intervention\Image $image){
return $image->fit(800, 500, null)->limitColors(5, '#ff9900')->invert();
}
你需要调用特定的适合度/颜色/反转链,你可以调用你的函数。
如果你必须在回应你的回应之前绝对做到这一点并且绝对限制等,你可以更进一步:
您可以创建一个Intervention\Image;
的子类,您可以在其中覆盖响应类(我认为,不确定是否有更好的响应类,您应该检查实际的库)并在内部调用这三个函数?
但这可能有点矫枉过正。
作为对你评论的回应:你可以这样做:
function editImage(\Intervention\Image $image, YourSettingsObject $settings){
return $image
->fit($settings->width, $settings->height, $settings->something)
->limitColors($settings->limit, $settings->color)
->invert();
} }
这里我假设您为设置创建了一个类,并从数据库中填充它。你当然可以轻松使用数组。您应该考虑一些侧点(比如设置对象中不存在的值的默认默认值),您可以使用您需要添加到设置对象的任何内容来扩展此功能。
所以你要做的就是创建你的第一个$image
,并从数据库(或数组,如果你这么倾向)获得你的$settings
对象,并将它们提供给一个函数。根据这些设置,您只需拨打一次fit
,limitColors
等所有内容。
答案 2 :(得分:-1)
您需要使用的是eval()
,但截至PHP
网站所述和引用的内容:
如果您意识到后果并且仍然需要它,那么你可以这样做:eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。
$extra = "fit(800, 500, null)->limitColors(5, '#ff9900')->invert()";
$image = eval('$manager->make($source)->'.$extra);