OpenCart - 如何禁用图像缓存系统?

OpenCart - how to disable image caching system?

使用电子商务平台 OpenCart (PHP/MySQL-based)。

问题:图像缓存很糟糕。不仅图像质量明显下降,而且 "cached" 图像尺寸实际上更大。所以,两败俱伤。

有谁知道如何完全禁用 OpenCart 2.0.3.1 中的图像缓存?

谢谢汤姆。我将在这里针对您的示例说明一些事情,然后我将尝试实际回答您的问题。

(1) 如果图像与请求的图像 大小 完全相同,则该图像永远不会被转码。请参阅 catalog/model/tool/image.php 的第 28 行,其中块内容为:

if ($width_orig != $width || $height_orig != $height) {
    $image = new Image(DIR_IMAGE . $old_image);
    $image->resize($width, $height);
    $image->save(DIR_IMAGE . $new_image);
} else {
    copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image);
}

不确定您是否熟悉 php,但该代码有效地说:

If the image height and width are the same as what's requested, then just copy the original into the cache and use it.

。在您的示例中,您显示了 500px x 500px 图像和 1:1 转码的结果。这是不可能的,除非你有第 3 方扩展来改变这里的核心方法。

(2) 您看到的大小增加可能是操作系统元数据或 jpg 引擎优化程度略低于您的图形应用程序所提供的结果。也可能是由于图像内容。无论如何,如您的示例所示,它可以忽略不计 - 可能在 1k 左右。在大多数情况下,图像引擎将能够减小尺寸(参见下面的示例),但这实际上取决于多种因素。

(3) 在大多数情况下,您显示的质量差异永远不会很明显。您已经介绍了我认为是放大精致灰度纹理的极端情况。任何类型的有损编码或转码(在这种情况下为 jpg)都可能会丢失这样的细节。这就是有损压缩的本质 - 您正在丢弃数据以换取更小的文件大小。

在下面的示例中,我随机拍摄了一张 335px x 285px 的图像,并将其调整为 335px x 284px 作为演示。出于所有意图和目的,我在这里看不到任何质量下降,图像大小从 32k 下降到 22k - 明显更小的尺寸:

原始 (335px x 285px, 32k):

由 Opencart 转码 (335px x 284px, 22k):

话虽如此,如果您仍然认为禁用图像缓存会对您的特定站点有益,那将非常容易。查看 catalog/model/tool/image.php 并将 resize() 方法修改为简单地 return 它传递的相同文件名:

public function resize($filename, $width, $height) {
    if ($this->request->server['HTTPS']) {
        return $this->config->get('config_ssl') . 'image/' . $filename;
    } else {
        return $this->config->get('config_url') . 'image/' . $filename;
    }
}