OptiPng + JpegOptim + Imagick


 Поделиться

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

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

После прочтения http://ocshop.info/nemnozhko-pro-xosting/, решил сделать себе на хостинге подобное.

Обратился в тех.поддержку хостинга, они выполнили просьбу и установили OptiPng + JpegOptim, Imagick включили в настройках php модулей.

 

Возник вопрос, как вкрутить "в библиотеку поддержку этого хлама." отсюда: http://ocshop.info/nemnozhko-tryukov/.

Так понимаю, надо внести код в файл system/library/image.php: 

$info = pathinfo(DIR_IMAGE . $new_image);
$extension = strtolower($info['extension']);
if ($extension == 'jpeg' || $extension == 'jpg') {
	shell_exec("jpegoptim --max=90 --strip-all --all-progressive ". (DIR_IMAGE . $new_image));
} elseif ($extension == 'png') {
	shell_exec("optipng ". (DIR_IMAGE . $new_image)) . "-strip all";
}

Подскажите, пожалуйста, как правильно интегрировать исходный код? Сборка ocStore 1.5.5.1.2

 

В комментарии к статье, написано, что есть очепятка в этой строчке:

shell_exec("optipng ". (DIR_IMAGE . $new_image)) . "-strip all";

 

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

Заменить код в файле system/library/image.php на предложенный вами, верно?

Если да, то получил 500 ошибку.

 

Напомню, сборка ocStore 1.5.5.1.2 

Шаред хостинг на AdminVps

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

44 минуты назад, ctam сказал:

Заменить код в файле system/library/image.php на предложенный вами, верно?

Если да, то получил 500 ошибку.

 

Напомню, сборка ocStore 1.5.5.1.2 

Шаред хостинг на AdminVps

 

Из-за того, что вставили не сюда 

admin/Model/Tool/Image.php

А значит для system/library/image.php нужно собрать самому, смотря на предложенный файл.

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

1 час назад, BuslikDrev сказал:

Из-за того, что вставили не сюда 


admin/Model/Tool/Image.php

 

Благодарю!

Вставил куда вы указали. Ошибка больше не вываливается.

 

Но прироста в PageSpeed не увидел :unsure:

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

33 минуты назад, ctam сказал:

 

Благодарю!

Вставил куда вы указали. Ошибка больше не вываливается.

 

Но прироста в PageSpeed не увидел :unsure:

 

Я себе так сделал в system/library/image.php:

Было:

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

    public function save($file, $quality = 70) {
        $info = pathinfo($file);
       
        $extension = strtolower($info['extension']);
           
        if (is_resource($this->image)) {
            if ($extension == 'jpeg' || $extension == 'jpg') {
                imagejpeg($this->image, $file, $quality);
            } elseif($extension == 'png') {
                imagepng($this->image, $file);
            } elseif($extension == 'gif') {
                imagegif($this->image, $file);
            }
               
            imagedestroy($this->image);
        }
    }

 

Стало:

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

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

 

 

Вам нужно также очистить кеш изображений, чтобы пересоздались они. jpegoptim --max=90 это настройка сжатия jpeg

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

 А как эта штуковина дружит с модулем Турбо в 2.3? Там же тоже есть настройка сжатия. Что лучше использовать?

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

В 23.10.2017 at 10:30, Yoda сказал:

<?php
class ModelToolImage extends Model {
    /**
    *    
    *    @param filename string
    *    @param width 
    *    @param height
    *    @param type char [default, w, h]
    *                default = scale with white space, 
    *                w = fill according to width, 
    *                h = fill according to height
    *    
    */
    public function resize($filename, $width, $height, $type = "") {
        if (!file_exists(DIR_IMAGE . $filename) || !is_file(DIR_IMAGE . $filename)) {
            return;
        } 
        
        $info = pathinfo($filename);
        
        $extension = $info['extension'];
        
        $old_image = $filename;
        $new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . $type .'.' . $extension;
        
        
                //$new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
        
        $currentLocal = setlocale(LC_ALL, 0);
        setlocale(LC_ALL, 'ru_RU.UTF-8');
        
        $pattern = [
            '/\/\/+/',
            '/\s/',
        ];
        
        $replace = [
            '/',
            '-',
        ];
        
        $new_image = 'cache/' . trim(escapeshellarg(preg_replace($pattern, $replace, urldecode(utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . $type . '.' . $extension))), '\'');
        
        
        if (!file_exists(DIR_IMAGE . $new_image) || (filemtime(DIR_IMAGE . $old_image) > filemtime(DIR_IMAGE . $new_image))) {
            $path = '';
            
            $directories = explode('/', dirname(str_replace('../', '', $new_image)));
            
            foreach ($directories as $directory) {
                $path = $path . '/' . $directory;
                
                if (!file_exists(DIR_IMAGE . $path)) {
                    @mkdir(DIR_IMAGE . $path, 0777);
                }        
            }
            list($width_orig, $height_orig) = getimagesize(DIR_IMAGE . $old_image);
            if ($width_orig != $width || $height_orig != $height) {
                $image = new Image(DIR_IMAGE . $old_image);
                $image->resize($width, $height, $type);
                $image->save(DIR_IMAGE . $new_image);
            } else {
                copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image);
            }
            
            $img_log = new Log('img_log.log');
        
            $optimized_image_path = escapeshellarg(DIR_IMAGE . $new_image);
            if ($extension == 'jpeg' || $extension == 'jpg') {        
                $img_log->write(shell_exec("jpegoptim --max=85 --strip-all --all-progressive " . $optimized_image_path));
            } elseif ($extension == 'png') {
                $img_log->write(shell_exec("optipng -strip all -o7 ". $optimized_image_path ." 2>&1"));
                
            }
            
        }
        
        
        if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
            return $this->config->get('config_ssl') . 'image/' . $new_image;
        } else {
            return $this->config->get('config_url') . 'image/' . $new_image;
        }    
    }
}
?>

 

 

Почему-то пропадают превьюшки в товарах админки :huh:

Возвращаю изменения назад - все работает.

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

В 31.10.2017 at 10:44, Yoda сказал:

В идеале весь этот огород неплохо подружить с Imagick, но код не дам. Я жадный.

Ну не бесплатно же, ёптыть

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

В 31.10.2017 at 11:44, Yoda сказал:

Прежде чем использовать на шареде - надо попросить их включить либы.

 

В 23.10.2017 at 10:12, ctam сказал:

Обратился в тех.поддержку хостинга, они выполнили просьбу и установили OptiPng + JpegOptim, Imagick включили в настройках php модулей.

 

Включено.

 

В итоге пережал все изображения через shell одной командой: 

$find -name *.jpg -exec jpegoptim --strip-all '{}' \;

 

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

  • 1 месяц спустя...

Присоединяйтесь к обсуждению

Вы можете опубликовать сейчас и зарегистрироваться позже. Если у вас есть учётная запись, войдите, чтобы публиковать под своей учётной записью.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Показать вместо этого как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Нельзя вставлять изображения напрямую. Загрузите или вставьте изображения по URL.

 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу