COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

OptiPng + JpegOptim + Imagick


Recommended Posts

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

После прочтения 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

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

В 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 11:44, Yoda сказал:

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

 

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

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

 

Включено.

 

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

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

 

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

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

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

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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