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

时间:2016-11-08 21:13:01

标签: caching opencart opencart2.x

使用电子商务平台OpenCart(基于PHP / MySQL)。

问题:图像缓存是可怕的。这些图像不仅会出现明显降低的质量问题,而且还会降低图像质量。图像尺寸实际上更大。所以,两个方面都失败了。

有没有人知道如何在OpenCart 2.0.3.1中完全禁用图像缓存?

1 个答案:

答案 0 :(得分:2)

谢谢汤姆。我将在此处针对您的示例提出一些问题,然后我会尝试回答您的问题。

(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,但该代码有效地说:

  

如果图像的高度和宽度与所要求的相同,则只需将原件复制到缓存中即可使用。

。在您的示例中,您将显示500px x 500px图像以及1:1转码的结果。除非你在这里修改了核心方法,否则这根本不可能。

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

(3)在大多数情况下,您展示的质量差异永远不会显而易见。你已经提出了我认为是一个极端的情况,其中精致的灰度纹理放大了。任何类型的有损编码或转码(在这种情况下为jpg)可能会丢失这样的细节。这是有损压缩的本质 - 您要丢弃数据以换取较小的文件大小。

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

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

http://zuma-design.com/shared/so/image-compare/kitten.jpg

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

http://zuma-design.com/shared/so/image-compare/kitten-335x284.jpg

尽管如此,如果您仍然觉得禁用图像缓存会使您的特定网站受益,那将非常容易。查看 catalog / model / tool / image.php 并修改resize()方法,只需返回它传递的相同文件名:

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;
    }
}