[Решено] Потеря качества изображения

Тема в разделе "OpenCart", создана пользователем five555, 28 мар 2019.

  1. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    Всем привет!
    Сайт sfera.by на OcStore 1.5.5.1.2

    Появилась проблема с качеством изображений товаров в категориях и модулях (везде). Изображения на сервере хранятся в хорошем качестве, а в кэше в ужасном.
    Пробовал править файл catalog/model/tool/image.php, но не помогло.
    Проблема появилась при переезде на другой хостинг, переносили сайт техподдержка хостинга. Говорят, что ничего не меняли в файлах.
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Смахивает на проблему с GD. То ли версия какая-то кривая, то ли настройки.
    А у вас никаких модулей не установлено для обработки изображений?
     
  3. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    Нет, я за последний год вообще никаких модулей не устанавливал. Меня полностью устраивала работа сайта.
    Был отключенный модуль водяного знака, но я и его вчера удалил на всякий случай. Кэш почистил, но проблема осталась.
    Сделал тестовый магазин на поддомене (OcStore 2.3). Закинул туда такое же изображение.
    Потеря качества есть, но не такая большая как на основном магазине:
    http://test.sfera.by/index.php?route=product/product&product_id=30
     
    Последнее редактирование: 28 мар 2019
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Полтергейст просто. Там версии php одинаковые?

    И у этих фоток немного размер отличается. Может, вы выставили на основном размер больше оригинала?
     
  5. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    PHP одинаковые (5.6). Я на том же хостинге сделал поддомен ничего не меняя.
    Выставил в админке изображение до одинаковых размеров, ничего не поменялось.
    --- Добавлено, 28 мар 2019 ---


    Проделал следующее:
    На оба сайта загрузил одно и то же изображение размером 500х500.
    Выставил размер всплывающего изображения 500х500 и там и там.
    В итоге в тестовом магазине размер изображения как положено 500х500, а в основном 550х550. Получается, что его что-то растягивает на 10%.
    Сделал то же самое с другими размерами исходных изображений - результат тот же.
     
    Последнее редактирование: 28 мар 2019
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    По скрину видно, что магазины не одинаковые. Как минимум, дело может быть в шаблоне.
     
  7. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    Дело не в шаблоне. Магазин три года работает на этом шаблоне, а изображения стали плохого качества около месяца назад.
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Тем не менее, именно шаблон является отличием между двумя версиями. Я не говорю, что дело исключительно в шаблоне, но именно что-то в нём могло так отреагировать на переезд.

    В шаблоне нет отдельных настроек размера изображения?
     
  9. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    Только что всё просмотрел. Только настройки слайдера и баннера.
    У меня что-то сильно забит .htaccess всяким барахлом. Хотя я его тоже сто лет не менял. Может там что-то лишнее удалить надо?
    Код:
    #dnwr_host cdn1.opencart.im cdn2.opencart.im
    
    Options +FollowSymlinks
    
    # Prevent Directoy listing
    Options All -Indexes
    
    # Prevent Direct Access to files
    <FilesMatch "\.(tpl|ini|log)">
        Order deny,allow
        Deny from all
    </FilesMatch>
    
    # SEO URL Settings
    # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
    RewriteEngine On
    RewriteBase /
    RewriteRule ^sitemap.xml$ index.php?route=feed/fast_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
    # Редирект c www на без www
     
    RewriteCond %{HTTP_HOST} ^www.sfera.by
     
    RewriteRule ^(.*)$ https://sfera.by/$1 [R=301,L]
     
    # Редирект для главной (с /index.php на /)
     
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/
     
    RewriteRule ^index\.html$ / [R=301,L]
     
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
     
    RewriteRule ^index\.php$ / [R=301,L]
    
    # Add "gzip Encoding" to already gzipped files
    AddType text/css .css .cssgz
    AddType text/javascript .js .jsgz
    AddEncoding x-gzip .cssgz .jsgz
    
    # Enable Gzip into use mod_gzip.c
    <IfModule mod_gzip.c>
        mod_gzip_on         Yes
        mod_gzip_dechunk    Yes
        mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
        mod_gzip_item_include mime      ^text\.*
        mod_gzip_item_include mime      ^application/x-javascript.*
        mod_gzip_item_include mime      ^application/x-font-woff.*
        mod_gzip_item_exclude mime      ^image\.*
        mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
    </IfModule>
    
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript
    </IfModule>
    
    # Disable access to php ettor log file
    <Files php_error.log>
        Order allow,deny
        Deny from all
        Satisfy All
    </Files>
    
    # Cache-Control
    <IfModule mod_headers.c>
        Header unset Last-Modified
    # 120 days
        <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|cssgz|jsgz)$">
        Header set Cache-Control "max-age=7776000, public"
        </FilesMatch>
    # 120 days + Append Accept Encoding
        <FilesMatch "\.(css|js|cssgz|jsgz)$">
        Header set Cache-Control "max-age=7776000, public"
        Header append Vary: Accept-Encoding
        </FilesMatch>   
    # 120 days
        <FilesMatch "\.(xml|txt)$">
        Header set Cache-Control "max-age=7776000, public, must-revalidate"
        </FilesMatch>
    # 120 days
        <FilesMatch "\.(html|htm|php)$">
            Header set Cache-Control "max-age=7776000, private, must-revalidate"
        </FilesMatch>
    # Compatible with old browsers
        <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
            Header unset X-UA-Compatible
        </FilesMatch>
    </IfModule>
    
    # Optimization for Browser Caching
    FileETag MTime Size
    <IfModule mod_expires.c>
        ExpiresActive on
        <filesmatch ".(jpg|jpeg|gif|png|ico|css|js|cssgz|jsgz)$">
            ExpiresDefault "access plus 1 year"
        </filesmatch>
        ExpiresDefault "access 7 days"
        ExpiresByType application/javascript "access plus 1 year"
        ExpiresByType text/javascript "access plus 1 year"
        ExpiresByType text/css "access plus 1 year"
        ExpiresByType text/html "access plus 7 day"
        ExpiresByType text/x-javascript "access 1 year"
        ExpiresByType image/gif "access plus 1 year"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png "access plus 1 year"
        ExpiresByType image/jpg "access plus 1 year"
        ExpiresByType image/x-icon "access 1 year"
        ExpiresByType application/x-shockwave-flash "access 1 year"
    </IfModule>
    
    #Compatible with old browsers
    <IfModule mod_setenvif.c>
        BrowserMatch "MSIE" force-no-vary
        BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    </IfModule>
    
    #max_execution_time это максимальное время работы скрипта, поставил побольше, чтобы сервер не вырубал работающий скрипт.
    #php_value max_execution_time 200
    
    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
    
    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
    # php_flag register_globals off
    
    # 2. If your cart has magic quotes enabled, This may work to disable it:
    # php_flag magic_quotes_gpc Off
    
    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M
    
    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M
    
    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    
    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_input_time 200
    
    AddDefaultCharset utf-8
     
  10. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ничего влияющего на качество изображений я там не вижу, но его таки надо исправить.

    Все редиректы должны идти до вот этих строк:
    Код:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
    Иначе они могут работать неправильно или вообще не работать.
    Вообще, правило простое - редиректы писать под строкой:
    Код:
    RewriteBase /
    Только будьте осторожны. При переносе редиректов может всплыть, что раньше они просто вообще не применялись, а когда после переноса они начнут применяться, окажется, что они неправильные. Были такие случаи.

    А второе - это правила, которые касаются сжатия и кеширования статики. На всех нормальных хостингах статику отдаёт nginx, а потому эти правила просто лишние.
     
    five555 нравится это.
  11. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    По поводу кэша техподдержка хостинга снова не помогла. Попозже вечером начну тупо пробовать заменять каталоги и файлы с чистого OcStore.
     
    Последнее редактирование: 29 мар 2019
  12. five555

    five555

    Регистрация:
    18 янв 2014
    Сообщения:
    248
    Симпатии:
    149
    Блин, нашёл причину.
    Дело было не в сайте и не в хостинге. Именно мой основной сайт (sfera.by) у меня в браузере (Chrome) открывался в масштабе 110%. Из-за этого и терялось качество изображений

    Приношу свои извинения за беспокойство и огромное спасибо Dotrox за участие в решении проблемы!

    P.S. Прошу модераторов удалить тему, т.к. в итоге она оказалась бесполезной.