0

我正在实施干预包来动态调整我网站中的图像大小。它工作得很好,我很满意。这是我如何做的一个例子:

Route::get('images/ads/{width}-{ad_image}-{permalink}.{format}', function($width, $image, $permalink, $format)
{
    $img = Image::make($image->path)
        ->resize($width, null, function($constraint){
            $constraint->aspectRatio();
        });
    return $img->response($format);
});

最近,我想通过中间件自动压缩我的视图来加快我的网站加载速度:

class HTMLminify
{
    public function handle($request, Closure $next) {
        $response = $next($request);
        $content = $response->getContent();

        $search = array(
            '/\>[^\S ]+/s', // strip whitespaces after tags, except space
            '/[^\S ]+\</s', // strip whitespaces before tags, except space
            '/(\s)+/s'       // shorten multiple whitespace sequences
        );

        $replace = array(
            '>',
            '<',
            '\\1'
        );

        $buffer = preg_replace($search, $replace, $content);
        return $response->setContent($buffer);
    }
}

然后噩梦来了。浏览器报告干预处理的图像现在被“截断”并且不会显示。关闭中间件可以毫无问题地显示图像。

据我从 HTMLminify 类的代码中可以看出,它修改了从视图生成的输出并删除了空格,并且看不出它会如何干扰图像的任何原因。

有什么想法吗,伙计们?

先谢谢了。

4

1 回答 1

0

好的。我通过排除图像被缩小找到了解决该问题的方法。显然,Intervention 推荐的通过路由实现也通过中间件,因为它是通过 Route::class 处理的。

class HTMLminify
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next) {
        $response = $next($request);
        $content = $response->getContent();

        if( !str_contains($response->headers->get('Content-Type'), 'image/') )
        {
            $search = array(
                '/\>[^\S ]+/s', // strip whitespaces after tags, except space
                '/[^\S ]+\</s', // strip whitespaces before tags, except space
                '/(\s)+/s'       // shorten multiple whitespace sequences
            );

            $replace = array(
                '>',
                '<',
                '\\1'
            );
            $buffer = preg_replace($search, $replace, $content);
            return $response->setContent($buffer);
        } else {
            return $response;
        }
    }
}
于 2015-11-28T19:26:49.427 回答