Jak podnieść jakość zdjęć produktów JPG (Magento 2)

18

Kompresja JPG w Magento 2 jest bardzo silna, więc jakość zdjęć produktów jest naprawdę zła w widoku katalogu i produktu. Jak mogę zmienić kompresję obrazu dla JPG w Magento 2?

Oliver Schmid
źródło

Odpowiedzi:

15

To rozwiązanie działa dla mnie:

Plik: {Dostawca} / {Moduł} /etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Catalog\Model\Product\Image" type="{Vendor}\{Module}\Model\Product\Image" />
</config>

Plik: {Dostawca} / {Moduł} / Model / Produkt Możesz ustawić jakość na dowolną wartość. Następnie opróżnij pamięć podręczną obrazu.

namespace {Vendor}\{Module}\Model\Product;

class Image extends \Magento\Catalog\Model\Product\Image {

    protected function _construct() {
        $this->_quality = 100;

        parent::_construct();
    }
}
Papamike
źródło
jaka jest ścieżka do umieszczenia tego pliku w niestandardowym motywie? Nie mogę ustalić struktury archiwizacji M2s. M1 było o wiele łatwiejsze
styzzz
W aplikacji / code / {Vendor} / {Module}
Papamike
ale czy nie zostaną one zastąpione podczas aktualizacji? myślałem, że będziesz musiał umieścić to w swoim motywie. Nie?
styzzz
1
Nie, folder {Vendor} musi zostać zastąpiony twoją przestrzenią nazw (może to być przykładowo styzzz). To nie zostanie zastąpione. Np .: / app / code / styzzz / ImageCompression / ...
Papamike,
Jeśli masz obraz PNG dla produktu, poziom kompresji jest zakodowany na stałe w adapterze GD2: vendor/magento/framework/Image/Adapter/Gd2.php:167do 9 (maks.)
Franck Garnier
5

W przypadku Magento 2.3.2 można ustawić jakość obrazu bez zmiany kodu:

Sklepy> Konfiguracja> Zaawansowane> System> Konfiguracja przesyłania zdjęć> Jakość> 100

Ścieżka konfiguracji XML to:

system/upload_configuration/jpeg_quality
K Vij
źródło
To nie daje odpowiedzi na pytanie. Gdy zdobędziesz wystarczającą reputację , będziesz mógł komentować dowolny post ; zamiast tego podaj odpowiedzi, które nie wymagają wyjaśnienia od pytającego . - Z recenzji
Jai
1
„Jak mogę zmienić kompresję obrazu dla JPG w Magento 2” ... Czy to nie było pytanie?
K Vij
lepsze niż inne odpowiedzi, ponieważ nie wymaga zmiany kodu
Barry
2

inside - vendor / magento / module-catalogue / Helper / Image.php

Znajdziesz ogólny:

public function setQuality($quality)
{
    $this->_getModel()->setQuality($quality);
    return $this;  
}

Jeśli grep za jego użyciem znajdziesz metodę o tej samej nazwie w:

magento / moduł-katalog / Model / Produkt / Image.php

i wewnątrz tego pliku:

/**
 * Default quality value (for JPEG images only).
 *
 * @var int
 */         
protected $_quality = 80;

Jest to ta wartość - która wymaga ustawienia 95.

Zmniejszy to kompresję i artefakty w witrynie.

Zakładam, że wasi ludzie będą musieli dokonać tych modyfikacji za pomocą odpowiednio wdrożonego zastąpienia kodu - tj. Nie przez modyfikację tego podstawowego pliku. Nie jestem programistą Magento, inaczej miałbym crack ...

LW71
źródło
3
W rzeczywistości zmiana jakichkolwiek wartości w Core (dostawcy) zostanie zastąpiona przez następną aktualizację, więc zmiana podstawowych plików jest ogólnie złym pomysłem
Marcel Hauri
2

Odpowiedzi tutaj są dość błędne IMO. To nie jest jakość, którą powinieneś zmieniać z pierwszej ręki , to rozmiar zdjęć. Dlaczego?

Problem polega na tym, że podczas kompresji obrazu w celu uzyskania najmniejszego możliwego rozmiaru pliku współczynnik kompresji jest najbardziej korzystny dla osiągnięcia tego celu. Drugi to wymiary obrazu. Powinieneś również zawsze skompresować oryginalny obraz źródłowy przed zmniejszeniem go (nie sprawdziłem, jak Magento sobie z tym radzi), aby zmniejszyć rozmiar pliku tak bardzo, jak to możliwe przy zachowaniu szczegółów.

Na ekranach siatkówki potrzebujesz 2x wyświetlanego rozmiaru. Aby uzyskać ostry obraz o wymiarach 250 x 250 pikseli, obraz musi mieć rozmiar 500 x 500 pikseli.

Zacznę więc od zmiany motywów w view.xmlcelu podwojenia wyświetlanego rozmiaru. Jeśli obraz nadal nie wygląda dobrze, rozważę podniesienie jakości. Jeśli masz czas, możesz również wdrożyć responsywne obrazy (więc podwójne rozmiary są ładowane tylko na urządzeniach z ekranem Retina ).

Możesz również zmniejszyć rozmiar, usuwając wszystkie metadane z obrazu, nie jestem pewien, czy magento robi to domyślnie, czy nie. Zazwyczaj jest to część dobrych usług kompresji obrazu.

OZZIE
źródło
1
Dziękujemy za wyjaśnienie tego partnera! Wiedziałem, że musi istnieć logiczny powód wygłupiania wizerunku magento! Nadal jestem trochę zdezorientowany co do implementacji. Powiedzmy, że moje produkty są wyświetlane na stronie produktu jako kwadrat o wielkości 700 pikseli, a następnie musiałbym utworzyć obraz o wielkości 1400 pikseli, a następnie zmienić odpowiednie ustawienie w pliku view.xml na 1400 pikseli. Bawiłem się tym, a także przesłonięciem wspomnianym w innych odpowiedziach, ale jakość na stronie produktu jest zawsze niższa niż wtedy, gdy klikam zdjęcie, aby przejść do widoku „powiększonego”.
Joshua Flood
@JoshuaFlood Myślę, że powiększony obraz ma swój własny widok. Xml z większym rozmiarem, nie pamiętam dokładnie, jaki ma on klucz ani jaki to jest rozmiar
OZZIE
Nie martw się, posortowałem to. Dzięki za wskazówkę! Nie jestem pewien, co dokładnie to zrobiło, ale zapomniałem zastąpić „małe” obrazy podwójnymi rozmiarami, aby problem mógł istnieć.
Joshua Flood
To nie jest dobra odpowiedź. To, co powinieneś zrobić, to użyć responsywnych obrazów i atrybutu srcset - nie tylko generalnie większy obraz, który będzie skalowany w dół, gdy zajdzie taka potrzeba.
fritzmg
@fritzmg „z pierwszej ręki” „Jeśli masz czas, możesz również zaimplementować responsywne obrazy” .. Którą część uważasz za trudną do zrozumienia?
OZZIE