Сжатие (уменьшение размера) файлов изображений 1С без внешних компонент - для любой конфигурации на основе БСП > 2.3

0. 1sig 168 08.03.20 21:20 Сейчас в теме
Если в базу загружено большое количество изображений, картинок, фото товаров, размером более 2-3МБ, то в базе будут сильно тормозить все процессы, связанные с чтением-передачей файлов изображений: формирование прайса, отчетов с картинками, выгрузка изображений товаров на сайт и т.д.
Данная обработка позволяет провести оптимизацию (уменьшение размера) загруженных картинок в базу 1С любой конфигурации на основе БСП >= 2.3 стандартными средствами 1С, сохраняя при этом достаточно хорошее качество сжатых картинок.
Проверено на релизе УТ 11.4.11.71, для обработки понадобится также версия Платформы 1С >= 8.3.14.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. BigB 181 09.03.20 00:32 Сейчас в теме
У меня у одного картинки не отображаются?
5. 1sig 168 09.03.20 12:22 Сейчас в теме
(1)у вас картинки не отображаются в статье?
10. BigB 181 09.03.20 19:37 Сейчас в теме
(5) Первая отображается, а вместо двух других - белые квадраты.
Прикрепленные файлы:
11. 1sig 168 09.03.20 20:14 Сейчас в теме
(10) спасибо, глюк инфостарта, в режиме редактирования подставляются другие (внутренние) ссылки на изображения
18. BigB 181 10.03.20 00:08 Сейчас в теме
(11) Вот теперь картинки отображаются все.
2. webester 33 09.03.20 07:03 Сейчас в теме
3. Xershi 1030 09.03.20 09:09 Сейчас в теме
Тестировали только на джипегах?
4. 1sig 168 09.03.20 12:21 Сейчас в теме
7. Xershi 1030 09.03.20 13:35 Сейчас в теме
(4) на svg еще протестируйте, там структура кажись немного другая.
9. Xershi 1030 09.03.20 15:51 Сейчас в теме
(7) хотя можете и по остальным форматам пробежаться.
12. 1sig 168 09.03.20 20:51 Сейчас в теме
(9)
одну картинку svg обработка "съела", на второй выдала ошибку:

"Ошибка при выполнении операции ImageMagick: 1cv8c.exe: NoDecodeDelegateForThisImageFormat ... @ error/svg.c/ReadSVGImage/3007"

судя по ошибке для работы с картинками используется кроссплатформенный пакет ImageMagick, а он работает с довольно внушительным списком форматов:
https://www.imagemagick.org/script/formats.php
на практике конечно проверять надо.

p.s.: в обработке установлен фильтр на след. форматы: *.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf
20. Xershi 1030 10.03.20 08:27 Сейчас в теме
(12)так я что то не так понял. БСП использует пакет? Тогда причём здесь без внешних компонент?
21. 1sig 168 10.03.20 08:35 Сейчас в теме
(20)
ImageMagick использует сам движок Платформы 1С (>=8.3.14), написанный на C, поэтому код обработки отдельного файла изображения будет работать и на чистой конфигурации.
БСП в заголовке указана только потому, что алгоритм групповой обработки обращается уже к объектам БСП, ответственным за хранение файлов изображений.
6. folo 176 09.03.20 13:25 Сейчас в теме
А не проще хранить файлы в каталоге вне базы ? Даже типовое решение это сейчас позволяет. Запаковать в зип с паролем если что.
Serega-artem; VAAngelov; SuhoffGV; +3 Ответить
8. SuhoffGV 09.03.20 13:41 Сейчас в теме
(6) зачем паковать в ЗИП с паролем? Достаточно того чтобы к папке с файлами был ограничен доступ средствами ОС. Оставить права пользователю, под которым работает сервер 1с, админу и, если есть, пользователю под которым работает служба резервного копирования.
13. 1sig 168 09.03.20 20:54 Сейчас в теме
(6)
верно - это и проще, и надежнее, и на ssd дисках пооптимальнее скорее всего будет, но у клиента база в облаках раруса, там сильно не разгонишься в ограниченных ресурсах их рядового сервака)
14. Moroz2009 09.03.20 21:04 Сейчас в теме
(13) мы сделали хранение файлов в yandex object storage - дёшево и сверхбыстро. Получается примерно 1,5тр за каждый терабайт данных в месяц - это чтение, запись, всяческие преобразования фото и видео на 2000 пользователей. Пришлось добавить вариант хранения в подсистеме хранения файлов. У Яндекса отдача может достигать терабайты в секунду и хранение в распределённых датацентрах. Ну и облачные базы становится выгоднее использовать - s3-хранилище гораздо дешевле, чем обычная база данных
ArchLord42; +1 Ответить
17. 1sig 168 09.03.20 23:16 Сейчас в теме
(14)
на 2000 пользователей - это конечно круто
15. CheBurator 3427 09.03.20 21:42 Сейчас в теме
То что в (0) называется сжатие - правильно именовать ресайзинг (resize) - изменение размера (если я правильно понял). А "сжатие" - это совсем из другой оперы.
16. 1sig 168 09.03.20 23:13 Сейчас в теме
(15)
верное замечание, просто обычно ключевое слово в поиске запросов по теме в основном так звучит :) и по факту цель всех манипуляций - уменьшение размера хранимых данных, вот "сжатие" размера файла и получается)
19. muskul 10.03.20 02:43 Сейчас в теме
22. kydesniklesa 05.04.20 20:14 Сейчас в теме
Доброго времени суток! Подскажите, пожалуйста, а возможно данной обработкой уменьшить размер *.pdf файлов?
23. 1sig 168 05.04.20 21:48 Сейчас в теме
(22)
теоретически может и сожмет

на практике скорее всего разработчики 1С ограничили эту возможность и будет исключение.
Прикрепленные файлы:
26. Spirit11 29 29.09.20 13:09 Сейчас в теме
Здравствуйте. Необходимо формировать прайс-лист с картинками в УНФ(фреш). Возможно ли сделать обработку сжатия для картинок прайса, не меняя размер картинок в хранилище?
27. 1sig 168 29.09.20 23:08 Сейчас в теме
(26) Здравствуйте! Можно попробовать сжимать "на лету" картинки для прайса, не меняя при этом размер картинок в хранилище. Но здесь надо смотреть, насколько такое решение будет тормозить формирование прайса.
28. Dwiss 159 15.10.20 18:50 Сейчас в теме
Неспецифицированная ошибка работы с ресурсом
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
Недостаточно свободной памяти для выполнения операции

вылетает с ошибкой
Разобрался, запустил 64 разрядную версию, все поехало, но выскакивает другая ошибка
Ошибка при выполнении операции ImageMagick: 1cv8c.exe: Cannot write PNG8 or color-type 3; colormap is NULL `C:\Users\virtuser\AppData\Local\Temp\v8_5E6E_3324' * error/png.c/WriteOnePNGImage/9270
{ВнешняяОбработка.СжатиеИзображений.Форма.Форма.Форма(47)}: НовКартинка = ОбрКартинка.ПолучитьКартинку();
{ВнешняяОбработка.СжатиеИзображений.Форма.Форма.Форма(68)}: КомандаВЫполнитьНаСервере();

по причине:
Ошибка преобразования картинки
по причине:
Ошибка при выполнении операции ImageMagick: 1cv8c.exe: Cannot write PNG8 or color-type 3; colormap is NULL `C:\Users\virtuser\AppData\Local\Temp\v8_5E6E_3324' * error/png.c/WriteOnePNGImage/9270
29. 1sig 168 17.10.20 21:11 Сейчас в теме
(28)
Добрый день!

Да, ошибка воспроизвелась при попытке сжать картинку в формате png8 - глубина цвета 8 бит (256 цветов), видать что то глючит в используемом движке ImageMagick, как вариант, в таких ситуациях можно переустановить глубину цвета на большую, обработка подредактирована с учетом этого, попробуйте, если будут еще ошибки, просьба сообщать.
Оставьте свое сообщение
Вопросы с вознаграждением