【问题标题】:images optimization in laravel applicationlaravel 应用中的图像优化
【发布时间】:2018-01-14 20:37:38
【问题描述】:

我有一个 laravel 网络应用程序,其中包含数千张上传的图片。我之前没有优化我的图像,现在我必须进行优化。

现在我有两个关于图像优化的问题;

  1. 图像优化有问题。我尝试过任何软件包 那会做“图像优化”,但在运行我的 优化代码,我的源代码中的图像不会有任何更改 控制。 为什么包不改变图片?
  2. 我在我的应用程序中使用了不同尺寸的相同图像。 例如一个名为“image_1.png”的图像正在使用大小 120 * 60 pxs 在主页中,并且它正在另一个页面中使用 尺寸 300*150 像素。 我应该如何处理这些正在使用的图像 使用不同的尺寸进行优化?

我用过的包如下:

  1. https://github.com/spatie/laravel-image-optimizer.git
  2. https://github.com/psliwa/image-optimizer.git

我正在为数据库中的图像使用这样的代码:

 foreach ($files as $file) {
            $filePath = //the image path
            ImageOptimizer::optimize($filePath);
        }

以上代码成功通过,代码运行过程中没有出现错误。但图像不会改变。

【问题讨论】:

  • 真的有理由优化图像吗?你说你突然要做图片优化有什么具体原因吗?
  • 是的,因为我在谷歌的页面速度(developers.google.com/speed/pagespeed/insights)我需要优化图像
  • 您以什么尺寸提供图像?您是否在不使用任何分页或延迟加载的情况下在一页中提供 100 张图片?此外,如果您的图像已经很小,除非您提供极高质量的图像,否则无需进行太多优化..
  • 我所有的页面也有分页。每页将显示大约 10-20 张图像。想象一下,我在一个页面中显示一个用户列表,他们的图像尺寸很小(例如 100*100 像素)。然后当我们点击每个用户时,我们会转到显示更大图像(300*300 像素)的主用户页面。我的图像质量不高,因为我使用“图像干预”包调整了它们的大小。但谷歌仍然告诉我每个页面需要更多优化
  • google 为其图像优化器提供了软件包,可以安装在您的网络服务器(nginx 或 apache)上,两者都有软件包。 apache:modpagespeed.com/doc/download nginx:github.com/pagespeed/ngx_pagespeed 我已经访问过你的网站,老实说它非常快.. 如果有很多需要优化的地方,请多多指教

标签: php image optimization laravel-5


【解决方案1】:

图像优化不仅仅是图像大小的调整,还有几个因素会影响图像文件的大小:

  1. 图像质量 - 在大多数情况下,您可以显着降低质量而不会产生明显的视觉影响。考虑您的图片目的和受众,并使用图片内容、受众和目的可接受的最低质量。

  2. 图片格式 - 确保每张图片都以其图片内容的正确格式交付。利用 CDN 服务或其他工具/逻辑来检查哪个浏览器发出请求,并使用元素及其 srcset 属性为不同的浏览器提供不同的格式。

  3. 图像元数据 - 默认情况下,图像包含大量由相机和图形应用程序存储的元数据,但这些数据在交付的图像中完全没有必要。

  4. 图像大小和调整大小 - 即使在服务器端调整大小时,请记住,您可以裁剪以专注于重要内容,而不仅仅是缩小图像。 p>

在我的网页设计项目中,我将 Cloudinary 用于 image optimization

基本上,它可以根据图像内容和浏览器找到最佳质量压缩级别和最佳编码设置,并自动在文件和质量之间做出权衡决策。

这是我的做法:

  • 使用“quality = auto”参数优化图像质量:

    cl_image_tag("sample.jpg", array("quality"=>"auto"))

这将减小文件大小,而不会对人眼造成任何明显的影响,也无需单独分析每张图像。

  • 使用“fetch_format = auto 参数优化图像格式:

cl_image_tag("sample.jpg", array("width"=>500, "fetch_format"=>"auto", "crop"=>"scale"))

这将缩小到 500 像素并以 JPEG 格式提供图像。

  • 通过裁剪优化图像大小:

cl_image_tag("sample.jpg", array("transformation"=>array( array("aspect_ratio"=>"4:3", "crop"=>"fill"), array("width"=>"auto", "dpr"=>"auto", "crop"=>"scale") )))

【讨论】:

    【解决方案2】:

    根据您的问题,我了解到您不需要优化,您需要“即时调整大小”服务。我会告诉你我是怎么做的。

    1. Download and install Intervention Image to Laravel

    2. Download and install Intervention Image CACHE to Laravel

    下载缓存组件后,暂时不要阅读它的文档,只需使用 composer 安装它

    1. 打开 routes/web.php 并像这样创建新路由,您可以替换名称并修改它以满足您的需要
    Route::get('resizer/{photo}/{ext}/{width}/{height}',function($photo, 
        $ext, $width,$height) {
    
        $image = new \Intervention\Image\ImageManager();
        $url = public_path('images/'.$photo.".".$ext); // If your photo is in public folder
        enter code here
        $res = $image->cache(function ($image) use ($url) {
    
            return $image->make($url)->resize($width, $height);
        }, 9999, true);
    
        return $res->response();
    
        })->name('resizer');
    
    1. 然后在你的刀片模板中你可以像这样使用它

    <img src="{{route(resizer,[$photo,$ext,$width,$height])}}"/>

    该过程非常简单,您获取照片并将其传递给干预图像,然后将其缓存以获得更快的响应并将其作为具有正确标题的响应返回。如果你有任何问题问!祝你好运

    P.S 如果需要,您可以在响应之前对图像进行优化。 P.S1 在处理之前,您必须额外检查照片是否存在这只是概念证明,您可以如何做到这一点

    【讨论】:

    • 非常感谢您的回复。我不得不说我也在使用图像干预包,并且我之前已经调整了所有图像的大小。但现在在 google pagespeed 我有图像优化问题。(developers.google.com/speed/pagespeed/insights)。我需要解决 google pagespeed 问题。
    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2013-02-08
    • 2012-05-11
    相关资源
    最近更新 更多