Перейти к содержанию
Truth_Explorer

Ресайз оригинала и размеры кэш картинок

Рекомендуемые сообщения

Здравствуйте.

 

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

 

В настройках темы задан размер изображения товаров. Максимальный размер указал 650 * 650. Создал картинку с размером 650*650, "прокачал" её через оптимизацию, сжал. В итоге получилось ~40 Кб. Что ж, отправляем её к товару.

 

Создались уменьшенные копии этого изображения в кэше для других размеров. Посмотрел я эти размеры :huh:

 

b2JSssdhTLeQq8jg4FMAQg.jpeg

 

В итоге, моё оптимизированное изображение размером 650*650 при размере в 400 весит больше оригинала.

 

Совершенно никуда не годится. А размер в 228 чуть уступает оригиналу.

 

Как оптимизировать ресайз изображений, чтобы опенкарт не брался за пережатие своими алгоритмами?

 

Буду благодарен за содержательные мнения и решения.

 

С уважением.

Изменено пользователем Truth_Explorer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

system/library/image.php

	
public function save($file, $quality = 90)

качество картинок, по умолчанию 90%. Уменьшите - уменьшится размер... и качество)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы сами создаете изображения с нужным размером и оптимизацией, то можно вообще убрать ресайз и выводить на страницу сразу оригинал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
55 минут назад, Shureg сказал:

system/library/image.php


	
public function save($file, $quality = 90)

качество картинок, по умолчанию 90%. Уменьшите - уменьшится размер... и качество)

 

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

 

Проблема в том, что при ресайзе размер изображения оригинального становится меньше, а "весит" больше.

Изменено пользователем Truth_Explorer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, gavi сказал:

Если вы сами создаете изображения с нужным размером и оптимизацией, то можно вообще убрать ресайз и выводить на страницу сразу оригинал.

 

буду благодарен за правильное решение. Это необходимо будет сделать в model/tool/image.php как я понимаю...

Изменено пользователем Truth_Explorer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, Truth_Explorer сказал:

Вы не внимательно прочитали тему. Дело не в качестве сейчас, а в размере уменьшенных автоматически в кэше изображений оригинала

 

Все правильно вам указали. И внимательно прочитали, не вы первый с проблемой сталкиваетесь. Решения еще есть, но с серверной стороны нужны работы. Вам предложили самое простое решение на 5 минут. Замените 90 процентное сжатие на 80..75 и получите нормальные размеры, но качество...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так:

Скрытый текст

    public function save($file, $quality = 84) {
        $info = pathinfo($file);

        $extension = strtolower($info['extension']);

        if (is_resource($this->image)) {
            if ($extension == 'jpeg' || $extension == 'jpg') {
                imageinterlace($this->image, true);
                imagejpeg($this->image, $file, $quality);
            } elseif ($extension == 'png') {
                imagepng($this->image, $file);
            } elseif ($extension == 'gif') {
                imagegif($this->image, $file);
            }

            imagedestroy($this->image);
        }
    }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Truth_Explorer, Да тут известная проблема я очень долго искал решение данной проблемы но УВЫ простого решения я не нашел. 
просто так средствами PHP нельзя оптимизировать картинку. Тут я нашел 2 выхода

1) Подключения платного модуля оптимизация по API который будет оптимизировать вашы картинки (есть проблема во времени создании кешированой картинки)

2) Если же у вас VPS/VDS тогда вы можете установить консольные утилиты и интегрировать с ними PHP скрипт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если vps/vds, то проблема решаема подключением и настройкой imagick

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, благодарю всех отписавших.

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

 

Я себе это представляю следующим образом: в соответствующих разделах (карточка товара, производители, логотипы и т.д.) подставлялись не уменьшенные варианты картинок, а единственная с указанием атрибутов width и height.

 

Это обдуманное и взвешенное решение, т.к. каждое изображение я обрабатываю самостоятельно, мол, кто-то сможет возразить, что кэш нужен, т.к. большие картинки вставлять (допустим) в обёртку width:100px height:100px - это моветон. Но я повторю, что это осознанный шаг.

 

Поэтому, резюмируя, задача такая:

я создаю единственное изображение, и на ресурс в нужных разделах подставляется именно она одна с атрибутами высота/ширина. Я хочу исключить картинка-200x200.jpg / картинка-100x100.jpg и т.д.

 

Есть ли у кого решение в данном направлении либо мысли?

 

Благодарю. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заменяйте во всех контроллерах ресайз на само изображение, какие тут еще соображения могут быть?

Например, в product.php

			if ($product_info['image']) {
				$data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height'));
			} else {
				$data['popup'] = '';
			}

станет

			if ($product_info['image']) {
				$data['popup'] = $product_info['image'];
			} else {
				$data['popup'] = '';
			}

и так далее..

Ломать  - не строить :D

ЗЫ: Это если размеры в шаблоне будете жестко задавать. Иначе еще их передать надо будет в шаблон и там, соответственно, подставить атрибутами, что-то типа

$data['image_popup_width'] = $this->config->get($this->config->get('config_theme') . '_image_popup_width'); 
$data['image_popup_height'] = $this->config->get($this->config->get('config_theme') . '_image_popup_height');

 

Изменено пользователем Shureg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.