使用电子商务平台OpenCart(基于PHP / MySQL)。
问题:图像缓存是可怕的。这些图像不仅会出现明显降低的质量问题,而且还会降低图像质量。图像尺寸实际上更大。所以,两个方面都失败了。
有没有人知道如何在OpenCart 2.0.3.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):
由Opencart转码(335px x 284px,22k):
尽管如此,如果您仍然觉得禁用图像缓存会使您的特定网站受益,那将非常容易。查看 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;
}
}