Community

Редактирование изображения на станции сканирования FlexiCapture10

Задача:
Редактирование изображения на станции сканирования перед отправкой на сервер FlexiCapture10.

Функционал станции сканирования позволяет выполнить обрезку изображения по прямоугольнику, инвертировать черно-белое изображение, очистить от мусора и убрать перекос. Кроме того, можно перед отправкой скрыть конфиденциальную информацию, поместив на ее месте черный прямоугольник.

Но что делать, если перед отправкой нужно выполнить более сложные операции?
В большинстве сценариев, редактировать каждое отсканированное изображение вручную ни к чему. Т.к. если у вас есть время на редактирование картинки, то скорее всего, есть время на ввод ее содержимого напрямую в систему. Но в отдельных случаях такой функционал может быть полезен.

План решения задачи такой:
  1. Создаем на панели инструментов станции сканирования кастомную кнопку. Нажатие этой кнопки будет обрабатывать скрипт.
  2. В скрипте определяем элементы, которые были активны (выбраны) в момент нажатия кнопки. Если мы выбрали изображение, то продолжаем…
  3. Создаем структуру с настройками формата и качества сохранения изображений
  4. Сохраняем изображение во временной директории
  5. Открываем подходящий редактор и передаем ему в качестве параметра путь к временному файлу с изображением. (Редактор должен поддерживать открытие файла изображения через параметр командной строки).
  6. Станция сканирования не позволяет из скрипта запускать приложения и «ждать возврата», потому придумаем бесконечный цикл, который будет раз в 2 сек. опрашивать статус открывшегося редактора на предмет «не завершился ли его процесс»
  7. После завершения процесса редактирования нужно вернуть на место отредактированное изображение и удалить его временную копию.

var page = Selection.Item(0);
if(page.IsPage)
{
//Создаем объект управления
var WshShell =new ActiveXObject("wscript.shell");
try
{
//Настройки сохранения временного файла
var savingOptions = this.NewImageSavingOptions();
savingOptions.Format = "jpg";
savingOptions.ColorType = "FullColor";
savingOptions.ShouldOverwrite = true;
savingOptions.AddProperFileExt = false;

//Путь к приложению графическому редактору
var editorPath = "%Image editor full path%" + " "; //В конце добавим пробел

//Путь к временному файлу
var filePath = "C:\\temp_image_30F56EFB-8F7C-443F-A204-74C0E11B7408.jpg";

//Сохраняем изображение
page.SaveAs(filePath, savingOptions);

//Запускаем приложение-редактор
var WshExec = WshShell.Exec(editorPath + filePath);
if(WshExec == null)
{
WshShell.Popup("Запустить не удалось", 0, "", 0);
return;
}

//Ждем, пока процесс запущен
while(WshExec.Status == 0)
{
Wait(2000);
}
SetPageImage(page, filePath);
}
finally
{
if(WshShell != null) delete WshShell;
var FSO = new ActiveXObject("Scripting.FileSystemObject");
if(FSO.FileExists(filePath))
{
FSO.DeleteFile(filePath);
}
delete FSO;
}
}

Для более надежного решения нужно озаботиться получением пути к «правильной» временной директории.
Кроме того, было бы правильно вывести оператору сообщение, что его страница будет заменена.

По идее, подобным способом можно выполнить и массовое редактирование изображений, если графический редактор поддерживает интерфейс командной строки.

Was this article helpful?

0 out of 0 found this helpful

Comments

1 comment

  • Avatar
    Permanently deleted user
    Eugene,

    This is some actual good stuff. Do you mind if I translate this to english on put the information on the english side of this forum?
    0

Please sign in to leave a comment.