Очень часто пользователи, отвечающие за наполнение информационной базы, загружают изображения, часто не задумываясь об формате и размерах. В результате очень часто база разрастается довольно сильно даже при малом объеме документооборота.
Чревато это увеличенными (раздутыми) объемами бэкапов, а также большой нагрузкой на обмены (в случае наличия распределенных баз).
В большинстве случаев, таких как вывод картинки в прайс-лист, либо выгрузки ее на сайт, достаточно даже изображений размером не больше 800x600 пикселей. Объем картинок, сохраненных в таком размере, обычно не превышает и 100 Кбайт, в то время, как исходное изображение может достигать 5-10 Мбайт (в случае загрузки его с цифрового фотоаппарата без изменения настроек по-умолчанию).
Данная обработка работает следующим образом:
1. Регистрируется библиотека GFLAx (архив для х32 и х64 ОС Windows прилагаю)
2. Открываете обработку, указываете группу номенклатуры, которую необходимо обработать
2. Устанавливаете максимальный размер (в байтах) для основного изображения, максимальную ширину и высоту изображения, до которого будет уменьшена картинка
3. После запуска будет отобрана вся номенклатура в указанной группе
4. Если размер основного изображения будет превышать указанный нами, то картинка сохраняется на жесткий диск (во временный каталог, или каталог, заданный вами вручную)
5. При помощи компоненты GFLAx производится пропорциональное уменьшение ширины и высоты изображения до максимально допустимого
6. Изображение сохраняется в формате JPEG с качеством 75 (в большинстве случаев этого более чем достаточно, в противном случае код обработки открыт и вы всегда этот момент можете доработать)
7. Сохраненное изображение загружается обратно в базу
Так же имеется возможность вывести небольшой отчет, с результатом работы обработки.
Что побудило меня на написание этой обработки? :) Звонок с филиала, с вопросом "Почему не происходит обмен". Начав разбираться, выясняю, что файл обмена в сжатом состоянии занимает больше 300МБайт. Т.к. обмен у нас осуществляется раз в полчаса, то со стороны филиала (интернет там не особо быстрый) сервер не успевал загрузить файл обмена с FTP, он перезаписывался в головном офисе, и обмен останавливался с ошибкой чтения файла. Причина разросшегося файла обмена была выяснена не сразу. Когда нашел - выяснил, что по новой номенклатуре от поставщика изображений нет, и был выделен специально для этого зеркальный фотоаппарат. Картинки загружались "как есть" с разрешением больше 3к пикселей в ширину и размером более 5МБайт.
Наткнулся на обработку уменьшения картинок для УТ 11: //infostart.ru/public/93278/
Однако для УТ 10.3 она конечно не подходит, т.к. томов файлов тут нет. Взял ее за основу. Скачал библиотеки GFLAx для 32 и 64-разрядных ОС. Установил и зарегистрировал библиотеки согласно описанию. Взлетело без проблем.
На всякий случай приведу алгоритм регистрации библиотеки GFLAx.
Скачиваете и распаковываете GflAX-binaries-3.0.zip
Если у вас 32-разрядная ОС:
1. Копируете папку Unicode Release.Win32 в директорию C:\Windows\System32
2. Запускаете командную строку от имени администратора и выполняете команду C:\Windows\system32\regsvr32.exe "Unicode Release.Win32\GflAX.dll"
Если у вас 64-разрядная ОС:
1. Копируете папку Unicode Release.Win32 в директорию C:\Windows\SysWOW64\
2. Копируете папку Unicode Release.x64 в директорию C:\Windows\System32
3. Запускаете командную строку от имени администратора и выполняете команду C:\Windows\system32\regsvr32.exe "Unicode Release.x64\GflAX.dll"
4. Выполняете команду C:\Windows\SysWOW64\regsvr32.exe "Unicode Release.Win32\GflAX.dll"
P.S. На своем примере обработав 1 группу номенклатуры размер изображений был уменьшен со 100 до 14МБайт, что считаю довольно существенным.
Обновление от 25.02.2016: Добавил возможность указания качества сжатия JPEG. Если исходная картинка в базе имеет более низкое качество и не происходит изменения ее размеров, то пересохраняться в более высоком качестве она не будет, т.к. фактически картинка останется та же, а размер ее вырастет.
Так же добавлена возможность обработки всех изображений номенклатуры, которые добавлены в файлах номенклатуры.
Обновление от 09.11.2021: Добавлена проверка на тип изображения. Если изображение PNG - то сжимается и сохраняется оно в расширении PNG, т.к. библиотека GFLAx крайне некорректно работает с прозрачностью при сохранении изображения в JPEG (изображения по сути становятся непригодными для просмотра).