2016-11-08 3 views
0

Verwendung der E-Commerce-Plattform OpenCart (PHP/MySQL-basiert).OpenCart - Wie kann ich das Image-Caching-System deaktivieren?

Problem: das Bild-Caching ist schrecklich. Die Bilder kommen nicht nur mit einer sichtbar verschlechterten Qualität heraus, sondern die "Cache" -Bildgröße ist tatsächlich größer. Also, scheitern an beiden Fronten.

Kann jemand den Bildcache in OpenCart 2.0.3.1 vollständig deaktivieren?

+1

Sie die Bildgröße im Admin-Bildeinstellungen festlegen können. Stellen Sie sicher, dass Ihre Originalbilder mindestens so viele Pixel haben, wie Sie die Größe ändern, und die Qualität ist gut. – billynoah

+0

Ich spreche nicht über die Bildgröße zu ändern. Das ist nicht das Problem. Das Problem, dass die OC-Caching-Engine die Bildqualität ruiniert. Selbst wenn das Original 2X-5X-10X die Auflösung hat, sieht das Endergebnis schrecklich aus. – TomJones999

+0

Das war nicht meine Erfahrung Tom. Können Sie bitte einen Bildvergleich nebeneinander stellen, um das Problem, das Sie sehen, zu veranschaulichen? – billynoah

Antwort

1

Danke Tom. Ich werde ein paar Dinge hier in Bezug auf Ihr Beispiel ansprechen und dann werde ich versuchen, Ihre Frage tatsächlich zu beantworten.

(1) Ein Bild wird niemals transcodiert, wenn es ist genau die gleiche Größe wie das angeforderte Bild. Siehe Zeile 28 von Katalog/Modell/Werkzeug/image.php wo der Block lautet:

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

Nicht sicher, ob man mit PHP vertraut ist, aber dass Code sagt effektiv:

Wenn das Bild Höhe und Breite sind identisch mit dem, was angefordert wird. Kopieren Sie dann das Original in den Cache und verwenden Sie es.

. In Ihrem Beispiel zeigen Sie ein 500px x 500px Bild und das Ergebnis einer 1: 1 Transcodierung. Das ist einfach nicht möglich, es sei denn, Sie haben Erweiterungen von Drittanbietern, die die Kernmethoden hier ändern.

(2) Die Zunahme der Größe, die Sie sehen, könnte das Ergebnis von Betriebssystem-Metadaten oder einer etwas weniger optimierten Jpg-Engine sein als das, was Ihre Grafikanwendung zu bieten hat. Es könnte auch aufgrund des Bildinhalts sein. Auf jeden Fall als Ihr Beispiel zeigt es ist vernachlässigbar - vielleicht um 1k. In den meisten Fällen kann die Image-Engine die Größe reduzieren (siehe Beispiel unten), aber es hängt wirklich von einer Vielzahl von Faktoren ab.

(3) Die Qualitätsunterschiede, die Sie zeigen, würden in den meisten Fällen nie offensichtlich sein. Sie haben gezeigt, was ich als extremer Fall empfinden würde, wenn zarte Graustufen-Texturen gezoomt werden. Jede Art von verlustbehafteter Kodierung oder Transcodierung (in diesem Fall jpg) wird wahrscheinlich solche Details verlieren. Das ist die Art der verlustbehafteten Komprimierung - Sie verwerfen Daten im Austausch für eine kleinere Dateigröße.

Im folgenden Beispiel nahm ich ein zufälliges Bild bei 335px x 285px und änderte es nur als Demonstration auf 335px x 284px. Für alle Absichten und Zwecke, kann ich keine Verschlechterung der Qualität sehen hier und die Bildgröße ging von 32k bis 22k - eine deutlich geringere Größe:

Original- (335px x 285px, 32k):

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

Transkodierte von Opencart (335px x 284px, 22k):

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

Wenn Sie immer noch das Gefühl haben, dass die Deaktivierung des Image-Caches für Ihre bestimmte Website von Vorteil ist, wäre das sehr einfach. Sehen Sie sich Katalog/Modell/Werkzeug/Bild an.php und ändern Sie die resize() Methode einfach den gleichen Dateinamen zurückgeben es passiert:

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