From b7b476e4728bbddd4279685ded98f6e38adad145 Mon Sep 17 00:00:00 2001 From: nertyog Date: Fri, 7 Aug 2026 04:32:44 +0300 Subject: [PATCH] docs: add exhaustive documentation table for all 19 pro tools across instruction.html, instructions.txt, and readme.txt --- docs/instruction.html | 301 +++++++++++++++++++-- docs/instructions.txt | 83 +++--- docs/readme.txt | 25 +- image_optimizer_nat_OC_20_22_1_1.ocmod.zip | Bin 787358 -> 790251 bytes instructions.txt | 83 +++--- readme.txt | 25 +- 6 files changed, 417 insertions(+), 100 deletions(-) diff --git a/docs/instruction.html b/docs/instruction.html index 7f374cf..e60362d 100644 --- a/docs/instruction.html +++ b/docs/instruction.html @@ -2636,7 +2636,7 @@ -
+
@@ -2644,7 +2644,9 @@ - + + + @@ -2656,15 +2658,17 @@ - + + + @@ -2672,15 +2676,17 @@ - + + + @@ -2688,15 +2694,17 @@ - + + + @@ -2704,15 +2712,17 @@ - + + + @@ -2720,15 +2730,17 @@ - + + + @@ -2736,15 +2748,251 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3614,3 +3862,4 @@ + diff --git a/docs/instructions.txt b/docs/instructions.txt index 8b8cea4..b8680a2 100644 --- a/docs/instructions.txt +++ b/docs/instructions.txt @@ -6,7 +6,7 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html -------------------------------------------------------------------------------- -🇺АКРАЇНСЬКА МОВА (UKRAINIAN) +🇺🇦 УКРАЇНСЬКА МОВА (UKRAINIAN) -------------------------------------------------------------------------------- ВСТАНОВЛЕННЯ ТА ОНОВЛЕННЯ: 1. Розпакуйте архів. @@ -15,15 +15,34 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html 4. Перейдіть у "Модулі / Розширення", знайдіть "Image Optimizer [NAT]" та натисніть "Встановити", потім "Редагувати". ПОВНИЙ ОГЛЯД ВСІХ 9 ВКЛАДОК ТА ФУНКЦІОНАЛУ: -- Вкладка 1 (Налаштування & Статистика): Вибір движка GD або Imagick (з явним маркуванням дій), накопичувальна статистика з бази даних сайту (враховує Оптимізацію, Очищення, Інструменти та Крон) з кнопкою [Скинути статистику], 100% експорт/імпорт налаштувань у JSON, правила для окремих папок та кнопка Онлайн Інструкції. -- Вкладка 2 (Стиснення та Ресайз): Вибір папок каталогу, режим безпечної копії (catalog_new) або заміни оригіналів, налаштування макс. ширини/висоти, якості (WebP/JPG/PNG), багатопотоковість, пороги економії та симетричні кнопки [ПАУЗА] і [ЗУПИНИТИ] 50/50. -- Вкладка 3 (Очищення від сміття): Глибоке сканування БД та файлів шаблону (.tpl, .twig, .php, .css, .js), безпечний Карантин (image/catalog_trash/) з відновленням в один клік або остаточне видалення. -- Вкладка 4 (Формати & Захист): Автоматичний захист від фейкових JPG на льоту (On-the-Fly Fake JPG Guard з вибором режиму білий JPG / прозорий PNG), WebP на льоту, SVG, Lazy Load (blur-up) та заглушка для битих посилань. -- Вкладка 5 (Інструменти Pro & Попередній перегляд): Санітайзер імен (очищення кирилиці й спецсимволів), конвертер колірного простору CMYK у sRGB, виправлення чорного фону (Edge-only floodfill) та порядковий візуальний порівняльний перегляд. -- Вкладка 6 (Водяні знаки): Динамічне накладання водяних знаків (зображення або текст) на льоту з прозорістю, кутом, шрифтом TTF та фільтрацією за категоріями. -- Вкладка 7 (Заглушки): Автопідстановка зображень-заглушок для товарів, категорій та брендів без фото. -- Вкладка 8 (Крон-завдання): Автоматичний фоновий запуск стиснення, очищення, санітайзера та виправлення чорних фонів за розкладом (щодня, щотижня, щомісяця). -- Вкладка 9 (Інфо & Екосистема [NAT]): Графік використання диска, контакти підтримки та кнопка Онлайн Інструкції. +- Вкладка 1 (Налаштування & Статистика): Вибір движка GD або Imagick (з маркуванням дій), накопичувальна статистика з бази даних сайту з кнопкою [Скинути статистику], 100% експорт/імпорт налаштувань у JSON, правила для окремих папок та кнопка Онлайн Інструкції. +- Вкладка 2 (Стиснення та Ресайз): Вибір папок, режим безпечної копії або заміни оригіналів, макс. розміри, якість (WebP/JPG/PNG), багатопотоковість, пороги економії та симетричні кнопки [ПАУЗА] і [ЗУПИНИТИ] 50/50. +- Вкладка 3 (Очищення від сміття): Пошук невикористовуваних зображень в БД та коді тем (.tpl, .twig, .php, .css, .js), Карантин з відновленням в 1 клік або видалення. +- Вкладка 4 (Формати & Захист): Захист від фейкових JPG на льоту (On-the-Fly Fake JPG Guard з вибором режиму білий JPG / прозорий PNG), WebP на льоту, SVG, Lazy Load (blur-up) та заглушка для битих посилань. +- Вкладка 5 (Інструменти Pro - 19 утиліт): + 1. broken_db - Пошук записів БД з відсутніми файлами на диску. + 2. broken_files - Пошук битих/корумпованих файлів (0 байт). + 3. empty_folders - Видалення порожніх папок в image/catalog. + 4. folder_tree - Аналіз розмірів та кількості файлів по папках. + 5. html_broken - Пошук битих 404 посилань на фото в HTML-описах. + 6. small_photos - Виявлення занадто малих фотографій. + 7. duplicates - Пошук точних дублікатів фото по хешу MD5. + 8. heavy_files - Знаходження надважких оригіналів (>500KB). + 9. cmyk - Сканування CMYK фото з автопереведенням у sRGB. + 10. svg_security - Очищення SVG-файлів від XSS та скриптів. + 11. black_bg - Відновлення білого фону (Edge-only floodfill) на фото з чорними рамками. + 12. watermark - Пакетне накладення водяних знаків. + 13. placeholders - Пакетне призначення заглушок. + 14. png_jpg - Конвертація важких PNG у компактний JPG/WebP. + 15. exif - Видалення EXIF-метаданих (GPS, камера) для економії 10-15%. + 16. smart_cache - Розумне очищення кешу зображень OpenCart. + 17. sanitizer - Очищення імен файлів від кирилиці, пропусків та спецсимволів. + 18. translit - Транслітерація кириличних назв фото у латиницю. + 19. cache_restore - Відновлення видалених оригіналів з кешу високої роздільної здатності. +- Вкладка 6 (Водяні знаки): Динамічне накладання водяних знаків (зображення або текст) на льоту. +- Вкладка 7 (Заглушки): Автопідстановка зображень-заглушок. +- Вкладка 8 (Крон-завдання): Фоновий запуск стиснення, очищення та інструментів за розкладом. +- Вкладка 9 (Інфо & Екосистема): Графік диска, контакти та кнопка Інструкції. -------------------------------------------------------------------------------- @@ -35,16 +54,16 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html 3. Перейдите в "Система" -> "Пользователи" -> "Группы пользователей", выберите группу (Administrator) и установите галочки прав для: extension/module/img_opti (или module/img_opti для OC 2.0-2.2). 4. Перейдите в "Модули / Расширения", найдите "Image Optimizer [NAT]", нажмите "Установить", затем "Редактировать". -ПОЛНЫЙ ОБЗОР ВСЕХ 9 ВКЛАДОК И ФУНКЦИОНАЛА: -- Вкладка 1 (Настройки & Статистика): Выбор движка GD или Imagick (с четкой маркировкой действий), накопительная статистика из базы данных сайта (учитывает Оптимизацию, Очистку, Инструменты и Крон) с кнопкой [Сбросить статистику], 100% экспорт/импорт настроек в JSON, правила для отдельных папок и кнопка Онлайн Инструкции. -- Вкладка 2 (Сжатие и Ресайз): Выбор папок каталога, режим безопасной копии (catalog_new) или замены оригиналов, настройки макс. ширины/высоты, качества (WebP/JPG/PNG), многопоточность, пороги экономии и симметричные кнопки [ПАУЗА] и [ЗУПИНИТИ] 50/50. -- Вкладка 3 (Очистка от мусора): Глубокое сканирование БД и файлов шаблона (.tpl, .twig, .php, .css, .js), безопасный Карантин (image/catalog_trash/) с восстановлением в один клик или окончательное удаление. -- Вкладка 4 (Форматы & Защита): Автоматическая защита от фейковых JPG на лету (On-the-Fly Fake JPG Guard с выбором режима белый JPG / прозрачный PNG), WebP на лету, SVG, Lazy Load (blur-up) и заглушка для битых ссылок. -- Вкладка 5 (Инструменты Pro & Предпросмотр): Санитайзер имен (очистка кириллицы и спецсимволов), конвертер цветового пространства CMYK в sRGB, исправление черного фона (Edge-only floodfill) и построчный визуальный сравнительный предпросмотр. -- Вкладка 6 (Водяные знаки): Динамическое наложение водяных знаков (изображение или текст) на лету с прозрачностью, углом, шрифтом TTF и фильтрацией по категориям. -- Вкладка 7 (Заглушки): Автоподстановка изображений-заглушек для товаров, категорий и брендов без фото. -- Вкладка 8 (Крон-задачи): Автоматический фоновый запуск сжатия, очистки, санитайзера и исправления черных фонов по расписанию (ежедневно, еженедельно, ежемесячно). -- Вкладка 9 (Инфо & Экосистема [NAT]): График использования диска, контакты поддержки и кнопка Онлайн Инструкции. +ПОЛНЫЙ ОБЗОР ВСЕХ 9 ВКЛАДОК И ФУНКЦИОНАЛА (19 УТИЛИТ): +- Вкладка 1 (Настройки & Статистика): Выбор движка GD или Imagick, накопительная статистика из базы данных с кнопкой [Сбросить статистику], 100% экспорт/импорт настроек в JSON, правила для отдельных папок и кнопка Онлайн Инструкции. +- Вкладка 2 (Сжатие и Ресайз): Выбор папок каталога, режим копии или замены оригиналов, наглядные 50/50 кнопки [ПАУЗА] и [ЗУПИНИТИ]. +- Вкладка 3 (Очистка от мусора): Поиск неиспользуемых фото в БД и файлах тем (.tpl, .twig, .php, .css, .js), безопасный Карантин или удаление. +- Вкладка 4 (Форматы & Защита): Защита от фейковых JPG на лету (On-the-Fly Fake JPG Guard), WebP на лету, SVG, Lazy Load (blur-up), редирект битых ссылок. +- Вкладка 5 (Инструменты Pro - 19 утилит): broken_db, broken_files, empty_folders, folder_tree, html_broken, small_photos, duplicates (MD5), heavy_files, cmyk (sRGB), svg_security, black_bg (floodfill), watermark, placeholders, png_jpg, exif, smart_cache, sanitizer, translit, cache_restore. +- Вкладка 6 (Водяные знаки): Наложение водяных знаков (текст/фото) на лету. +- Вкладка 7 (Заглушки): Автозамена отсутствующих фото товаров, категорий и брендов. +- Вкладка 8 (Крон-задачи): Автоматический фоновый запуск по расписанию (ежедневно, еженедельно, ежемесячно). +- Вкладка 9 (Инфо & Экосистема): График использования диска, контакты поддержки и кнопка Онлайн Инструкции. -------------------------------------------------------------------------------- @@ -52,17 +71,17 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html -------------------------------------------------------------------------------- INSTALLATION & UPGRADE: 1. Extract the archive. -2. Upload the contents of upload/ to your OpenCart root directory via FTP. -3. Go to System -> Users -> User Groups. Select Administrator and set Access/Modify permissions for extension/module/img_opti (or module/img_opti for OC 2.0-2.2). -4. Go to Extensions -> Modules, install "Image Optimizer [NAT]", and click Edit. +2. Upload upload/ to your OpenCart root directory via FTP. +3. Set permissions for extension/module/img_opti (or module/img_opti for OC 2.0-2.2). +4. Install "Image Optimizer [NAT]" under Extensions -> Modules. -EXHAUSTIVE 9-TAB MODULE OVERVIEW: -- Tab 1 (Settings & Stats): GD / Imagick engine choice with labelled actions, persistent DB stats with [Reset Statistics] button, 100% full JSON settings export/import, individual folder rules, online instruction button. -- Tab 2 (Compression): Catalog folder tree, Safe Copy vs Replace mode, max width/height limits, WebP/JPG/PNG quality, multi-threading, savings replacement thresholds, 50/50 Pause & Stop controls. -- Tab 3 (Cleaner): Deep scanning of DB tables and theme files (.tpl, .twig, .php, .css, .js), safe Quarantine with 1-click restore, or permanent deletion. -- Tab 4 (Formats & Guard): On-the-Fly Fake JPG Guard (white JPG vs transparent PNG toggle), WebP on-the-fly, SVG, Lazy Load (blur-up), fallback image override. -- Tab 5 (Tools Pro & Preview): Name Sanitizer, CMYK to sRGB converter, Black Background Fixer (Edge-only floodfill), and per-row side-by-side comparison modal. -- Tab 6 (Watermarks): Dynamic on-the-fly image and text overlays with opacity, angle, TTF font, and category filtering. -- Tab 7 (Placeholders): Fallback placeholder replacement for products, categories, and brands. +EXHAUSTIVE 9-TAB OVERVIEW (INCLUDING 19 PRO UTILITIES): +- Tab 1 (Settings & Stats): GD / Imagick engine choice, persistent DB stats with reset button, 100% full JSON export/import, folder rules, online instruction button. +- Tab 2 (Compression): Folder tree selection, Safe Copy vs Replace, dimensions, qualities, 50/50 Pause & Stop controls. +- Tab 3 (Cleaner): Deep scanning of DB tables and theme files (.tpl, .twig, .php, .css, .js), safe Quarantine with 1-click restore. +- Tab 4 (Formats & Guard): On-the-Fly Fake JPG Guard, WebP on-the-fly, SVG, Lazy Load (blur-up), broken image fallback. +- Tab 5 (Tools Pro - 19 Utilities): broken_db, broken_files, empty_folders, folder_tree, html_broken, small_photos, duplicates (MD5), heavy_files, cmyk (sRGB), svg_security, black_bg (edge floodfill), watermark, placeholders, png_jpg, exif, smart_cache, sanitizer, translit, cache_restore. +- Tab 6 (Watermarks): Dynamic on-the-fly image and text overlays. +- Tab 7 (Placeholders): Fallback placeholder replacement. - Tab 8 (Cron Scheduler): Automated background runner for daily, weekly, or monthly scheduled jobs. -- Tab 9 (Info & Ecosystem): Disk space pie chart, support contacts, and online instruction button. +- Tab 9 (Info & Ecosystem): Disk space chart, support contacts, online instruction button. diff --git a/docs/readme.txt b/docs/readme.txt index 6266161..19205e6 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -61,11 +61,26 @@ TAB 4: IMAGE FORMATS & PROTECTION - On-the-Fly Fake JPG Guard: Binary PNG header detection inside .jpg extension to eliminate black background glitches on the storefront. Mode dropdown toggle: Convert to white JPG vs save as transparent PNG. - Fallback Image: Global placeholder image override for broken image links. -TAB 5: TOOLS (PRO) & VISUAL PREVIEW -- File & Folder Name Sanitizer: Cleans Cyrillic characters, spaces, and special symbols from filenames. -- CMYK to sRGB Converter: Converts CMYK printing colorspace to sRGB web colorspace. -- Black Background Fixer: Edge-only perimeter floodfill replacement of black borders from transparent PNGs converted improperly to JPG. -- Per-row Visual Preview: Compare original vs processed image side-by-side in modal dialog before applying changes. +TAB 5: TOOLS (PRO) & VISUAL PREVIEW (19 SPECIALIZED UTILITIES) +1. broken_db: Finds DB entries with missing physical files. +2. broken_files: Scans for binary-corrupted or zero-byte truncated images. +3. empty_folders: Scans and purges empty catalog subdirectories. +4. folder_tree: Deep size and file count analysis per subfolder. +5. html_broken: Scans product/category HTML for 404 image links. +6. small_photos: Identifies low-res photos under dimension limits. +7. duplicates: Finds exact duplicate images using MD5 content hashes. +8. heavy_files: Flags raw oversized images exceeding KB limits. +9. cmyk: Detects CMYK color space images and auto-converts to sRGB. +10. svg_security: Strips malicious JS scripts and XSS from SVG files. +11. black_bg: Edge-only floodfill repair of black background borders. +12. watermark: Batch watermarking utility. +13. placeholders: Batch placeholder assignment for missing assets. +14. png_jpg: Mass converts heavy PNGs to JPG/WebP and updates DB. +15. exif: Strips camera/GPS metadata for 10-15% size reduction. +16. smart_cache: Selective expired image cache purger. +17. sanitizer: Cleans file paths of spaces, Cyrillic, and illegal chars. +18. translit: Transliterates Cyrillic filenames to SEO Latin. +19. cache_restore: Recovers deleted original photos from high-res cache. TAB 6: WATERMARKS - Dynamic On-the-Fly Overlays: Apply image or text watermarks dynamically on products, categories, brands, or banners. diff --git a/image_optimizer_nat_OC_20_22_1_1.ocmod.zip b/image_optimizer_nat_OC_20_22_1_1.ocmod.zip index 8fd36b23854175d9c7d6cdf24416c519d7f62871..3bdaf0be9eeb856a846f6ecc8efd99868f0a7786 100644 GIT binary patch delta 25057 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 delta 22204 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 s{`JMy8a^!;pjOWe&1Ei?jhX4Qo diff --git a/instructions.txt b/instructions.txt index 8b8cea4..b8680a2 100644 --- a/instructions.txt +++ b/instructions.txt @@ -6,7 +6,7 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html -------------------------------------------------------------------------------- -🇺АКРАЇНСЬКА МОВА (UKRAINIAN) +🇺🇦 УКРАЇНСЬКА МОВА (UKRAINIAN) -------------------------------------------------------------------------------- ВСТАНОВЛЕННЯ ТА ОНОВЛЕННЯ: 1. Розпакуйте архів. @@ -15,15 +15,34 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html 4. Перейдіть у "Модулі / Розширення", знайдіть "Image Optimizer [NAT]" та натисніть "Встановити", потім "Редагувати". ПОВНИЙ ОГЛЯД ВСІХ 9 ВКЛАДОК ТА ФУНКЦІОНАЛУ: -- Вкладка 1 (Налаштування & Статистика): Вибір движка GD або Imagick (з явним маркуванням дій), накопичувальна статистика з бази даних сайту (враховує Оптимізацію, Очищення, Інструменти та Крон) з кнопкою [Скинути статистику], 100% експорт/імпорт налаштувань у JSON, правила для окремих папок та кнопка Онлайн Інструкції. -- Вкладка 2 (Стиснення та Ресайз): Вибір папок каталогу, режим безпечної копії (catalog_new) або заміни оригіналів, налаштування макс. ширини/висоти, якості (WebP/JPG/PNG), багатопотоковість, пороги економії та симетричні кнопки [ПАУЗА] і [ЗУПИНИТИ] 50/50. -- Вкладка 3 (Очищення від сміття): Глибоке сканування БД та файлів шаблону (.tpl, .twig, .php, .css, .js), безпечний Карантин (image/catalog_trash/) з відновленням в один клік або остаточне видалення. -- Вкладка 4 (Формати & Захист): Автоматичний захист від фейкових JPG на льоту (On-the-Fly Fake JPG Guard з вибором режиму білий JPG / прозорий PNG), WebP на льоту, SVG, Lazy Load (blur-up) та заглушка для битих посилань. -- Вкладка 5 (Інструменти Pro & Попередній перегляд): Санітайзер імен (очищення кирилиці й спецсимволів), конвертер колірного простору CMYK у sRGB, виправлення чорного фону (Edge-only floodfill) та порядковий візуальний порівняльний перегляд. -- Вкладка 6 (Водяні знаки): Динамічне накладання водяних знаків (зображення або текст) на льоту з прозорістю, кутом, шрифтом TTF та фільтрацією за категоріями. -- Вкладка 7 (Заглушки): Автопідстановка зображень-заглушок для товарів, категорій та брендів без фото. -- Вкладка 8 (Крон-завдання): Автоматичний фоновий запуск стиснення, очищення, санітайзера та виправлення чорних фонів за розкладом (щодня, щотижня, щомісяця). -- Вкладка 9 (Інфо & Екосистема [NAT]): Графік використання диска, контакти підтримки та кнопка Онлайн Інструкції. +- Вкладка 1 (Налаштування & Статистика): Вибір движка GD або Imagick (з маркуванням дій), накопичувальна статистика з бази даних сайту з кнопкою [Скинути статистику], 100% експорт/імпорт налаштувань у JSON, правила для окремих папок та кнопка Онлайн Інструкції. +- Вкладка 2 (Стиснення та Ресайз): Вибір папок, режим безпечної копії або заміни оригіналів, макс. розміри, якість (WebP/JPG/PNG), багатопотоковість, пороги економії та симетричні кнопки [ПАУЗА] і [ЗУПИНИТИ] 50/50. +- Вкладка 3 (Очищення від сміття): Пошук невикористовуваних зображень в БД та коді тем (.tpl, .twig, .php, .css, .js), Карантин з відновленням в 1 клік або видалення. +- Вкладка 4 (Формати & Захист): Захист від фейкових JPG на льоту (On-the-Fly Fake JPG Guard з вибором режиму білий JPG / прозорий PNG), WebP на льоту, SVG, Lazy Load (blur-up) та заглушка для битих посилань. +- Вкладка 5 (Інструменти Pro - 19 утиліт): + 1. broken_db - Пошук записів БД з відсутніми файлами на диску. + 2. broken_files - Пошук битих/корумпованих файлів (0 байт). + 3. empty_folders - Видалення порожніх папок в image/catalog. + 4. folder_tree - Аналіз розмірів та кількості файлів по папках. + 5. html_broken - Пошук битих 404 посилань на фото в HTML-описах. + 6. small_photos - Виявлення занадто малих фотографій. + 7. duplicates - Пошук точних дублікатів фото по хешу MD5. + 8. heavy_files - Знаходження надважких оригіналів (>500KB). + 9. cmyk - Сканування CMYK фото з автопереведенням у sRGB. + 10. svg_security - Очищення SVG-файлів від XSS та скриптів. + 11. black_bg - Відновлення білого фону (Edge-only floodfill) на фото з чорними рамками. + 12. watermark - Пакетне накладення водяних знаків. + 13. placeholders - Пакетне призначення заглушок. + 14. png_jpg - Конвертація важких PNG у компактний JPG/WebP. + 15. exif - Видалення EXIF-метаданих (GPS, камера) для економії 10-15%. + 16. smart_cache - Розумне очищення кешу зображень OpenCart. + 17. sanitizer - Очищення імен файлів від кирилиці, пропусків та спецсимволів. + 18. translit - Транслітерація кириличних назв фото у латиницю. + 19. cache_restore - Відновлення видалених оригіналів з кешу високої роздільної здатності. +- Вкладка 6 (Водяні знаки): Динамічне накладання водяних знаків (зображення або текст) на льоту. +- Вкладка 7 (Заглушки): Автопідстановка зображень-заглушок. +- Вкладка 8 (Крон-завдання): Фоновий запуск стиснення, очищення та інструментів за розкладом. +- Вкладка 9 (Інфо & Екосистема): Графік диска, контакти та кнопка Інструкції. -------------------------------------------------------------------------------- @@ -35,16 +54,16 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html 3. Перейдите в "Система" -> "Пользователи" -> "Группы пользователей", выберите группу (Administrator) и установите галочки прав для: extension/module/img_opti (или module/img_opti для OC 2.0-2.2). 4. Перейдите в "Модули / Расширения", найдите "Image Optimizer [NAT]", нажмите "Установить", затем "Редактировать". -ПОЛНЫЙ ОБЗОР ВСЕХ 9 ВКЛАДОК И ФУНКЦИОНАЛА: -- Вкладка 1 (Настройки & Статистика): Выбор движка GD или Imagick (с четкой маркировкой действий), накопительная статистика из базы данных сайта (учитывает Оптимизацию, Очистку, Инструменты и Крон) с кнопкой [Сбросить статистику], 100% экспорт/импорт настроек в JSON, правила для отдельных папок и кнопка Онлайн Инструкции. -- Вкладка 2 (Сжатие и Ресайз): Выбор папок каталога, режим безопасной копии (catalog_new) или замены оригиналов, настройки макс. ширины/высоты, качества (WebP/JPG/PNG), многопоточность, пороги экономии и симметричные кнопки [ПАУЗА] и [ЗУПИНИТИ] 50/50. -- Вкладка 3 (Очистка от мусора): Глубокое сканирование БД и файлов шаблона (.tpl, .twig, .php, .css, .js), безопасный Карантин (image/catalog_trash/) с восстановлением в один клик или окончательное удаление. -- Вкладка 4 (Форматы & Защита): Автоматическая защита от фейковых JPG на лету (On-the-Fly Fake JPG Guard с выбором режима белый JPG / прозрачный PNG), WebP на лету, SVG, Lazy Load (blur-up) и заглушка для битых ссылок. -- Вкладка 5 (Инструменты Pro & Предпросмотр): Санитайзер имен (очистка кириллицы и спецсимволов), конвертер цветового пространства CMYK в sRGB, исправление черного фона (Edge-only floodfill) и построчный визуальный сравнительный предпросмотр. -- Вкладка 6 (Водяные знаки): Динамическое наложение водяных знаков (изображение или текст) на лету с прозрачностью, углом, шрифтом TTF и фильтрацией по категориям. -- Вкладка 7 (Заглушки): Автоподстановка изображений-заглушек для товаров, категорий и брендов без фото. -- Вкладка 8 (Крон-задачи): Автоматический фоновый запуск сжатия, очистки, санитайзера и исправления черных фонов по расписанию (ежедневно, еженедельно, ежемесячно). -- Вкладка 9 (Инфо & Экосистема [NAT]): График использования диска, контакты поддержки и кнопка Онлайн Инструкции. +ПОЛНЫЙ ОБЗОР ВСЕХ 9 ВКЛАДОК И ФУНКЦИОНАЛА (19 УТИЛИТ): +- Вкладка 1 (Настройки & Статистика): Выбор движка GD или Imagick, накопительная статистика из базы данных с кнопкой [Сбросить статистику], 100% экспорт/импорт настроек в JSON, правила для отдельных папок и кнопка Онлайн Инструкции. +- Вкладка 2 (Сжатие и Ресайз): Выбор папок каталога, режим копии или замены оригиналов, наглядные 50/50 кнопки [ПАУЗА] и [ЗУПИНИТИ]. +- Вкладка 3 (Очистка от мусора): Поиск неиспользуемых фото в БД и файлах тем (.tpl, .twig, .php, .css, .js), безопасный Карантин или удаление. +- Вкладка 4 (Форматы & Защита): Защита от фейковых JPG на лету (On-the-Fly Fake JPG Guard), WebP на лету, SVG, Lazy Load (blur-up), редирект битых ссылок. +- Вкладка 5 (Инструменты Pro - 19 утилит): broken_db, broken_files, empty_folders, folder_tree, html_broken, small_photos, duplicates (MD5), heavy_files, cmyk (sRGB), svg_security, black_bg (floodfill), watermark, placeholders, png_jpg, exif, smart_cache, sanitizer, translit, cache_restore. +- Вкладка 6 (Водяные знаки): Наложение водяных знаков (текст/фото) на лету. +- Вкладка 7 (Заглушки): Автозамена отсутствующих фото товаров, категорий и брендов. +- Вкладка 8 (Крон-задачи): Автоматический фоновый запуск по расписанию (ежедневно, еженедельно, ежемесячно). +- Вкладка 9 (Инфо & Экосистема): График использования диска, контакты поддержки и кнопка Онлайн Инструкции. -------------------------------------------------------------------------------- @@ -52,17 +71,17 @@ http://oc3-demo.nat.od.ua/instructions/image_optimizer_nat_instruction.html -------------------------------------------------------------------------------- INSTALLATION & UPGRADE: 1. Extract the archive. -2. Upload the contents of upload/ to your OpenCart root directory via FTP. -3. Go to System -> Users -> User Groups. Select Administrator and set Access/Modify permissions for extension/module/img_opti (or module/img_opti for OC 2.0-2.2). -4. Go to Extensions -> Modules, install "Image Optimizer [NAT]", and click Edit. +2. Upload upload/ to your OpenCart root directory via FTP. +3. Set permissions for extension/module/img_opti (or module/img_opti for OC 2.0-2.2). +4. Install "Image Optimizer [NAT]" under Extensions -> Modules. -EXHAUSTIVE 9-TAB MODULE OVERVIEW: -- Tab 1 (Settings & Stats): GD / Imagick engine choice with labelled actions, persistent DB stats with [Reset Statistics] button, 100% full JSON settings export/import, individual folder rules, online instruction button. -- Tab 2 (Compression): Catalog folder tree, Safe Copy vs Replace mode, max width/height limits, WebP/JPG/PNG quality, multi-threading, savings replacement thresholds, 50/50 Pause & Stop controls. -- Tab 3 (Cleaner): Deep scanning of DB tables and theme files (.tpl, .twig, .php, .css, .js), safe Quarantine with 1-click restore, or permanent deletion. -- Tab 4 (Formats & Guard): On-the-Fly Fake JPG Guard (white JPG vs transparent PNG toggle), WebP on-the-fly, SVG, Lazy Load (blur-up), fallback image override. -- Tab 5 (Tools Pro & Preview): Name Sanitizer, CMYK to sRGB converter, Black Background Fixer (Edge-only floodfill), and per-row side-by-side comparison modal. -- Tab 6 (Watermarks): Dynamic on-the-fly image and text overlays with opacity, angle, TTF font, and category filtering. -- Tab 7 (Placeholders): Fallback placeholder replacement for products, categories, and brands. +EXHAUSTIVE 9-TAB OVERVIEW (INCLUDING 19 PRO UTILITIES): +- Tab 1 (Settings & Stats): GD / Imagick engine choice, persistent DB stats with reset button, 100% full JSON export/import, folder rules, online instruction button. +- Tab 2 (Compression): Folder tree selection, Safe Copy vs Replace, dimensions, qualities, 50/50 Pause & Stop controls. +- Tab 3 (Cleaner): Deep scanning of DB tables and theme files (.tpl, .twig, .php, .css, .js), safe Quarantine with 1-click restore. +- Tab 4 (Formats & Guard): On-the-Fly Fake JPG Guard, WebP on-the-fly, SVG, Lazy Load (blur-up), broken image fallback. +- Tab 5 (Tools Pro - 19 Utilities): broken_db, broken_files, empty_folders, folder_tree, html_broken, small_photos, duplicates (MD5), heavy_files, cmyk (sRGB), svg_security, black_bg (edge floodfill), watermark, placeholders, png_jpg, exif, smart_cache, sanitizer, translit, cache_restore. +- Tab 6 (Watermarks): Dynamic on-the-fly image and text overlays. +- Tab 7 (Placeholders): Fallback placeholder replacement. - Tab 8 (Cron Scheduler): Automated background runner for daily, weekly, or monthly scheduled jobs. -- Tab 9 (Info & Ecosystem): Disk space pie chart, support contacts, and online instruction button. +- Tab 9 (Info & Ecosystem): Disk space chart, support contacts, online instruction button. diff --git a/readme.txt b/readme.txt index 6266161..19205e6 100644 --- a/readme.txt +++ b/readme.txt @@ -61,11 +61,26 @@ TAB 4: IMAGE FORMATS & PROTECTION - On-the-Fly Fake JPG Guard: Binary PNG header detection inside .jpg extension to eliminate black background glitches on the storefront. Mode dropdown toggle: Convert to white JPG vs save as transparent PNG. - Fallback Image: Global placeholder image override for broken image links. -TAB 5: TOOLS (PRO) & VISUAL PREVIEW -- File & Folder Name Sanitizer: Cleans Cyrillic characters, spaces, and special symbols from filenames. -- CMYK to sRGB Converter: Converts CMYK printing colorspace to sRGB web colorspace. -- Black Background Fixer: Edge-only perimeter floodfill replacement of black borders from transparent PNGs converted improperly to JPG. -- Per-row Visual Preview: Compare original vs processed image side-by-side in modal dialog before applying changes. +TAB 5: TOOLS (PRO) & VISUAL PREVIEW (19 SPECIALIZED UTILITIES) +1. broken_db: Finds DB entries with missing physical files. +2. broken_files: Scans for binary-corrupted or zero-byte truncated images. +3. empty_folders: Scans and purges empty catalog subdirectories. +4. folder_tree: Deep size and file count analysis per subfolder. +5. html_broken: Scans product/category HTML for 404 image links. +6. small_photos: Identifies low-res photos under dimension limits. +7. duplicates: Finds exact duplicate images using MD5 content hashes. +8. heavy_files: Flags raw oversized images exceeding KB limits. +9. cmyk: Detects CMYK color space images and auto-converts to sRGB. +10. svg_security: Strips malicious JS scripts and XSS from SVG files. +11. black_bg: Edge-only floodfill repair of black background borders. +12. watermark: Batch watermarking utility. +13. placeholders: Batch placeholder assignment for missing assets. +14. png_jpg: Mass converts heavy PNGs to JPG/WebP and updates DB. +15. exif: Strips camera/GPS metadata for 10-15% size reduction. +16. smart_cache: Selective expired image cache purger. +17. sanitizer: Cleans file paths of spaces, Cyrillic, and illegal chars. +18. translit: Transliterates Cyrillic filenames to SEO Latin. +19. cache_restore: Recovers deleted original photos from high-res cache. TAB 6: WATERMARKS - Dynamic On-the-Fly Overlays: Apply image or text watermarks dynamically on products, categories, brands, or banners.
Назва інструментуНазва інструментуКатегорія Опис та функціонал
PNG to JPG Converterbroken_dbСканер - Знаходить великі важкі файли PNG (наприклад, фото товарів на білому фоні) та конвертує їх у JPG. Зменшує розмір файлу на 70-80%, автоматично оновлюючи шляхи в БД. + Пошук записів у БД (товари, доп. фото, категорії, бренди), для яких відсутній фізичний файл на диску. Дозволяє очистити биті записи або встановити заглушку. - Находит тяжелые файлы PNG (без прозрачности) и конвертирует их в JPG. Уменьшает размер файлов на 70-80% и обновляет БД. + Поиск записей в БД (товары, доп. фото, категории, бренды), для которых отсутствует физический файл на диске. Позволяет очистить битые записи или поставить заглушку. - Detects large PNG images lacking alpha transparency channels and translates them to JPEGs, reducing file size by 70-80% while updating database references automatically. + Finds database records referencing missing image files on disk. Allows clearing broken DB records or assigning fallback placeholders.
Duplicates Cleanerbroken_filesСканер - Порівнює MD5-хеші зображень на сервері. Якщо знайдено повні копії з різними іменами, залишає лише один файл, а всі посилання в БД перенаправляє на нього. + Сканування диску на наявність бінарно пошкоджених чи неповних файлів зображень (0 байт, корумповані заголовочні блоки). - Находит полные дубликаты файлов по MD5-хешу, удаляет лишние файлы и обновляет пути в базе данных на единый файл. + Сканирование диска на наличие бинарно поврежденных или неполных файлов изображений (0 байт, битые заголовки). - Compares MD5 checksums of files on server. Merges exact byte duplicates, deletes duplicates, and rewires DB records to point to a single original image file. + Scans disk for binary-corrupted or zero-byte truncated image files that fail GD/Imagick headers.
Watermarks Rulesempty_foldersСканер - Створення динамічних правил накладання водяних знаків (текст чи зображення) на кеш картинок товарів, брендів чи категорій. Підтримує налаштування прозорості, кута нахилу та фільтрацію. + Пошук та автоматичне видалення порожніх директорій всередині image/catalog/ для підтримки чистоти файлового дерева. - Создание правил наложения водяных знаков (текст или картинка) на кэш. Поддерживает прозрачность, угол наклона, скругление и фильтрацию категорий/брендов. + Поиск и автоматическое удаление пустых директорий внутри image/catalog/ для поддержания чистоты файлового дерева. - Manages dynamic watermarks overlay (text/image) on catalog cache. Supports opacity sliders, rotation angles, TTF font rendering, and category inclusion/exclusion limits. + Finds and safely deletes empty nested folders inside image/catalog/ to maintain a clean directory structure.
Broken DB Scannerfolder_treeСканер - Знаходить записи в БД, які посилаються на видалені файли. Дозволяє очистити лінки, вимкнути товари або підставити заглушки. + Повний аналіз об'єму та кількості файлів у кожній окремій підпапці каталогу. Допомагає знайти найважчі папки сайту. - Находит в базе данных ссылки на отсутствующие файлы. Позволяет убрать ссылки, отключить товары или установить заглушки. + Полный анализ объема и количества файлов в каждой отдельной подпапке каталога. Помогает найти самые тяжелые папки сайта. - Finds database entries referencing missing files. Offers batch actions to clean references, disable products, or link placeholder placeholders. + Deep directory tree breakdown showing total filesize and file counts for every nested catalog folder.
Transliteration & Translithtml_brokenСканер - Перейменовує файли з кирилицею або пробілами в іменах на безпечну транслітерацію, що запобігає збоям кодування на деяких хостингах. + Пошук битих посилань на зображення в HTML-описах товарів, категорій та статей блогу, які віддають помилку 404. - Переименовывает файлы, содержащие кириллицу или пробелы, переводя их в транслит, и обновляет пути к ним в базе данных. + Поиск битых ссылок на изображения в HTML-описаниях товаров, категорий и статей блога, отдающих 404. - Finds and sanitizes filenames containing cyrillic or spaces. Renames them using safe transliteration and maps changes to the database. + Parses product and category HTML descriptions to locate broken <img> src paths returning 404.
CMYK Convertersmall_photosСканер - Швидко конвертує колірний простір CMYK у sRGB, що попереджає ситуації, коли фото товарів не завантажуються або відображаються некоректно на iPhone чи Safari. + Пошук занадто малих/неякісних фотографій товарів (менше заданої ширини/висоти у пікселях, наприклад < 300px). - Переводит изображения из цветового профиля CMYK в sRGB для корректного отображения картинок на устройствах Apple (iPhone, Safari). + Поиск слишком маленьких/некачественных фотографий товаров (меньше заданной ширины/высоты в пикселях, например < 300px). - Converts files from CMYK to sRGB, preventing display failures on Safari browsers and Apple iOS devices. + Filters catalog images below configurable pixel dimension thresholds (e.g. height/width under 300px). + +
duplicatesСканер + + Пошук дублікатів фотографій на сервері за хеш-сумами вмісту (MD5), незалежно від імені файлу. Дозволяє вивільнити гігабайти дубльованих фото. + + Поиск дубликатов фотографий на сервере по хэш-суммам содержимого (MD5), независимо от имени файла. Позволяет освободить гигабайты дубликатов. + + Identifies exact duplicate images across catalog directories via content MD5 hashing, regardless of filename. + +
heavy_filesСканер + + Пошук надзвичайно "важких" оригінальних фотографій (понад вказаний ліміт у КБ, наприклад > 500 КБ або > 2 МБ). + + Поиск чрезвычайно "тяжелых" оригинальных фотографий (свыше указанного лимита в КБ, например > 500 КБ или > 2 МБ). + + Highlights oversized original images exceeding KB file size thresholds (e.g. raw 5MB+ photo uploads). + +
cmykСканер + + Виявлення фотографій у друкарському колірному просторі CMYK (які виглядають инвертованими або не відображаються у Safari/iOS) з автоматичним переведенням у sRGB. + + Обнаружение фотографий в типографском цветовом пространстве CMYK (выглядящих инвертированными или не открывающихся в Safari/iOS) с автоматическим переводом в sRGB. + + Scans for CMYK printing color space images causing discolored/inverted rendering on iOS/Safari, with automated sRGB conversion. + +
svg_securityСканер + + Сканування та очищення SVG-файлів від потенційно шкідливих JavaScript-скриптів та XSS-ін'єкцій. + + Сканирование и очистка SVG-файлов от потенциально вредоносных JavaScript-скриптов и XSS-инъекций. + + Audit and sanitization of uploaded SVG files to strip malicious embedded JavaScript and XSS payload tags. + +
black_bgСканер + + Сканування фотографій з чорними фоновими рамками після некоректної конвертації PNG у JPG. Включає утиліту Edge-Only Floodfill для відновлення білого фону або збереження прозорого PNG. + + Сканирование фотографий с черными фоновыми рамками после некорректной конвертации PNG в JPG. Включает утилиту Edge-Only Floodfill для восстановления белого фона или сохранения прозрачного PNG. + + Scans for black background border artifacts from improper PNG-to-JPG conversions. Includes Edge-Only Floodfill to replace borders with white or restore transparent PNG. + +
watermarkГенератор + + Пакетне накладення водяних знаків (текст або зображення) на вибіркову групу фотографій товарів або категорій. + + Пакетное наложение водяных знаков (текст или изображение) на выборочную группу фотографий товаров или категорий. + + Batch watermarking utility for selected catalog image paths using text or graphics overlays. + +
placeholdersГенератор + + Пакетне встановлення зображень-заглушок для відсутніх або битих фото товарів у БД. + + Пакетная установка изображений-заглушек для отсутствующих или битых фото товаров в БД. + + Batch assignment of fallback placeholder images for catalog items missing a physical asset. + +
png_jpgГенератор + + Масове конвертування важких непрозорих PNG-зображень у компактні JPG або WebP файли із заміною посилань в БД. + + Массовое конвертирование тяжелых непрозрачных PNG-изображений в компактные JPG или WebP файлы с заменой ссылок в БД. + + Converts heavy non-transparent PNG files into lightweight JPG/WebP assets and updates DB table references. + +
exifГенератор + + Очищення службових EXIF-метаданих (геолокація GPS, модель камери, авторство) для додаткового зменшення ваги файлів на 10-15%. + + Очистка служебных EXIF-метаданных (геолокация GPS, модель камеры, авторство) для дополнительного уменьшения веса файлов на 10-15%. + + Strips technical EXIF metadata (GPS location, camera parameters) to shave an extra 10-15% off file weights. + +
smart_cacheГенератор + + Розумне очищення кешу OpenCart image/cache/ з можливістю вибіркового вилучення застарілих мініатюр. + + Умная очистка кэша OpenCart image/cache/ с возможностью выборочного удаления устаревших миниатюр. + + Selective purger for expired OpenCart thumbnail cache inside image/cache/ without affecting active assets. + +
sanitizerЕкспериментальний + + Санітайзер імен файлів: автоматичне очищення шляхів від кирилиці, спецсимволів, пропусків та дублюючих підкреслень з синхронізацією в БД. + + Санитайзер имен файлов: автоматическая очистка путей от кириллицы, спецсимволов, пробелов и дублирующих подчеркиваний с синхронизацией в БД. + + Filename sanitizer: strips spaces, Cyrillic, and illegal special characters from file paths while auto-updating DB tables. + +
translitЕкспериментальний + + Автоматична транслітерація кириличних назв фото у латиницю за стандартом SEO URL. + + Автоматическая транслитерация кириллических названий фото в латиницу по стандарту SEO URL. + + Automated transliteration of Cyrillic filename strings into clean SEO-friendly Latin characters. + +
cache_restoreЕкспериментальний + + Відновлення втрачених оригіналів з вищих за роздільною здатністю знімків кешу при випадковому видаленні. + + Восстановление утерянных оригиналов из снимков кэша с высоким разрешением при случайном удалении. + + Recovery tool for accidentally deleted original files by analyzing and extracting high-resolution cached thumbnails.