Как повысить качество фотографий товара JPG (Magento 2)

18

Сжатие JPG в Magento 2 очень сильное, поэтому качество изображений продуктов в представлении «Каталог» и «Продукт» становится очень плохим. Как я могу изменить сжатие изображения для JPG в Magento 2?

Оливер Шмид
источник

Ответы:

15

Это решение работает для меня:

Файл: {Vendor} / {Module} /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>

Файл: {Vendor} / {Module} / Model / Product. Вы можете установить качество на ваше усмотрение. Затем очистите кэш изображений.

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

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

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

        parent::_construct();
    }
}
Papamike
источник
Каков путь, чтобы поместить этот файл в вашей пользовательской теме? я не могу понять структуру подачи M2s. М1 было оооочень намного проще
styzzz
В приложении / code / {Vendor} / {Module}
Папамике
но не переопределится ли это во время обновления? Я думал, что вы должны были бы поместить это в свою тему. нет?
Styzzz
1
Нет, папка {Vendor} должна быть заменена вашим пространством имен (например, это может быть styzzz). Это не будет отменено. Пример: / app / code / styzzz / ImageCompression / ...
Папамике
Если у вас есть изображение PNG для продукта, уровень сжатия жестко закодирован в адаптере GD2: vendor/magento/framework/Image/Adapter/Gd2.php:167до 9 (макс.)
Franck Garnier
5

Что касается Magento 2.3.2, то можно установить качество изображения без изменения кода:

Магазины> Конфигурация> Дополнительно> Система> Конфигурация загрузки изображений> Качество> 100

Конфигурационный путь XML:

system/upload_configuration/jpeg_quality
К Видж
источник
Это не дает ответа на вопрос. Как только у вас будет достаточно репутации, вы сможете комментировать любой пост ; вместо этого предоставьте ответы, которые не требуют разъяснений от автора . - Из обзора
Jai
1
«Как я могу изменить сжатие изображений для JPG в Magento 2» ... Разве это не был вопрос?
К Видж
лучше, чем другие ответы, так как изменение кода не требуется
Барри
2

внутри - вендор / magento / module-каталог / Helper / Image.php

Вы найдете общий:

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

Если вы grep для его использования, вы найдете метод с тем же именем в:

Magento / модуль-каталог / модель / продукта / image.php

и внутри этого файла:

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

Именно это значение должно быть установлено на 95.

Это уменьшит сжатие и артефакты на сайте.

Я полагаю, что ваши парни должны будут внести эти изменения с соответствующим образом развернутым переопределением кода - т.е. не путем модификации этого основного файла. Я не разработчик magento, иначе у меня будет крэк ....

LW71
источник
3
На самом деле, изменение любых значений в Core (вендоре) будет перезаписано при следующем обновлении, поэтому смена основных файлов в целом является плохой идеей
Марсель Хаури
2

Ответы здесь довольно неправильные ИМО. Это не качество, которое вы должны изменить из первых рук , это размер изображений. Почему?

Дело в том, что при сжатии изображения до минимально возможного размера файла степень сжатия является наиболее выгодной для достижения этой цели. Второй размер изображения. Также вы всегда должны сжимать исходное исходное изображение перед уменьшением его размера (я не проверял, как magento справляется с этим), чтобы максимально уменьшить размер файла при сохранении деталей.

На экранах сетчатки вам нужно в 2 раза больше отображаемого размера. Таким образом, чтобы получить четкое изображение с разрешением 250x250 пикселей, оно должно быть 500x500 пикселей.

Поэтому я бы начал с изменения тем, view.xmlчтобы удвоить отображаемый размер. Если изображение по-прежнему выглядит не очень хорошо, я бы подумал о повышении качества. Если у вас есть время, вы также можете реализовать адаптивные изображения (таким образом, удвоенные размеры загружаются только на устройствах с сетчаткой ).

Вы также можете уменьшить размер, удалив все метаданные с изображения, не будучи уверенным, если magento делает это по умолчанию или нет. Обычно это часть хороших сервисов сжатия изображений.

Ozzie
источник
1
Спасибо за объяснение этого приятеля! Я знал, что должна быть логическая причина для дурацкого образа мадженто! Я все еще немного запутался в реализации. Итак, скажем, мои продукты отображаются на странице продукта в виде квадрата 700px, тогда мне нужно создать изображение с квадратом 1400px, а затем изменить соответствующий параметр в файле view.xml на 1400px? Я играл с этим, а также с переопределением, упомянутым в других ответах, но качество всегда ниже на странице продукта, чем когда я нажимаю на изображение, чтобы войти в «увеличенный» вид.
Джошуа Флуд
@JoshuaFlood Я думаю, что увеличенное изображение имеет свою собственную запись в view.xml с большим размером, хотя я не могу точно вспомнить, какой у него ключ или какой у него размер
OZZIE
Не беспокойся, я разобрался. Спасибо за чаевые! Не уверен, что именно это сделал, но я забыл заменить «маленькие» изображения на изображения двойного размера, так что проблема может быть.
Джошуа Флуд
Это не хороший ответ. Вам следует использовать адаптивные изображения и атрибут srcset, а не просто предоставлять увеличенное изображение в целом, которое будет уменьшено при необходимости.
fritzmg
@fritzmg "из первых рук" "Если бы у вас было время, вы могли бы также реализовать адаптивные изображения" .. какую часть вы находите трудной для понимания?
Оззи