Обработка изображений (dpi, цветность) — для 1С отчетности. Обычные формы


Простая обработка по изменению качества сканов документов для отправки налоговикам.

Бывает, что от компании требуется предоставить сканы документов в налоговую, и это можно сделать из 1с отчетности. Что удивительно — при привязке файлов к письму, разработчиками отчетности небыло предусмотрено никакой конвертациисжатия картинок (только предупреждение, что, дескать, убедитесь что качество картинок соответствует), и когда бухгалтер через пару тысяч счет-фактур узнает что, видите ли, качество сканов слишком высокое — радости просто нету предела. По опыту, такие сканы просто не принимаются, приходит отбойник со словами «качество картинок не подходит».

Данная обработка заточена именно под налоговые, которым надо 150-300 dpi и 256-цветную чб картинку. Сначала искал что-то подобное, но примеров для работы с картинками из 1с не так уж и много.

Основа — компонента GFLAx, http://www.xnview.com/en/GFL/#downloads, ставится без проблем, если всетаки не работает — смотрим по ссылке http://infostart.ru/public/312924 (спасибо  insurgut )

Можно конечно, сделать через фотошоп ирфан вью, но пользователям проще выбрать файлы и нажать одну кнопку, чем руками крутить настройки

 

Добавлю основную процедуру, которой на вход идет строка с путем к файлу или папке с картинками, конвертированые картинки складываются в *Обработанные файлы


Процедура ОбработатьКартинку(ПутьФайла) Экспорт

МассивРасширенийКартинок = Новый Массив;
МассивРасширенийКартинок.Добавить(".bmp");
МассивРасширенийКартинок.Добавить(".jpg");
МассивРасширенийКартинок.Добавить(".jpeg");
МассивРасширенийКартинок.Добавить(".tif");
МассивРасширенийКартинок.Добавить(".gif");
МассивРасширенийКартинок.Добавить(".png");

ВхФайл = Новый Файл(ПутьФайла);
Если Не ВхФайл.Существует() Тогда
Сообщить("Указанный файлкаталог не существует!");
Возврат;
КонецЕсли;

ОбъектКом = Новый COMОбъект("GFLAX.GFLAX");

Если ВхФайл.ЭтоКаталог() Тогда
КаталогСохранения = ПутьФайла + ?(Прав(ПутьФайла,1) = "", "", "") + "Обработанные файлы";

Файл = Новый Файл(КаталогСохранения);
Если Не Файл.Существует() Тогда
СоздатьКаталог(КаталогСохранения);
КонецЕсли;

///
Для Каждого Расширение Из МассивРасширенийКартинок Цикл
НайдФайлы = НайтиФайлы(ПутьФайла, "*" + Расширение, Ложь);
Для Каждого НайдФайл Из НайдФайлы Цикл
КонвертироватьПересохранитьФайл(ОбъектКом, НайдФайл, КаталогСохранения);
КонецЦикла;
КонецЦикла;

Иначе
МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПутьФайла, "");
ПутьФайла2 = СтрЗаменить(ПутьФайла, МассивЭлементов[МассивЭлементов.Количество()-1], "");
КаталогСохранения = ПутьФайла2 + ?(Прав(ПутьФайла2,1) = "", "", "") + "Обработанные файлы";

Файл = Новый Файл(КаталогСохранения);
Если Не Файл.Существует() Тогда
СоздатьКаталог(КаталогСохранения);
КонецЕсли;

КонвертироватьПересохранитьФайл(ОбъектКом, ВхФайл, КаталогСохранения);
КонецЕсли;

Сообщить("=== Выполнено. Обработанные файлы помещены в """ + КаталогСохранения + """");

КонецПроцедуры
Процедура КонвертироватьПересохранитьФайл(ОбъектКом, ВхФайл, КаталогСохранения)

ТекИмяФайла = ВхФайл.ПолноеИмя;
//ОбъектКом.EnableLZW = Истина;[=boolean] - для формата гиф
ОбъектКом.LoadBitmap(ВхФайл.ПолноеИмя);

ОбъектКом.Xdpi = 200;
ОбъектКом.Ydpi = 200;

ОбъектКом.ChangeColorDepth(256,0,1);
ОбъектКом.SaveJPEGQuality = 75;

Если ОбъектКом.SaveFormat <> 1 Тогда
ОбъектКом.SaveFormat = 1;
ТекИмяФайла = КаталогСохранения + ВхФайл.ИмяБезРасширения + ".jpg";
Иначе
ТекИмяФайла = КаталогСохранения + ВхФайл.Имя;
КонецЕсли;

Попытка
ОбъектКом.SaveBitmap(ТекИмяФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

КонецПроцедуры

1 Comment

  1. salexdv

    (0) Как вариант, можно воспользоваться GGraphics. Демо-версия, как раз, выводит только ч/б изображения.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *