|
Запуск консольного приложения из макета с двоичными данными | ☑ | ||
---|---|---|---|---|
0
napagokc
30.10.13
✎
14:58
|
Поделитесь опытом, пожалуйста...
Мне нужно уменьшить размер картинок товаров. Погуглил, остановился на идее использовать консольное приложение "convert.exe" из пакета ImageMagick. Хочу реализовать работу с этим конвертором через обычную внешнюю обработку, без какой-либо дополнительной установки ПО, т.к. обработку потом нужно будет разослать в филиалы, чтобы там ей воспользовались. Т.к. у всех разные ОС и разный уровень знаний, хочу всю работу пользователей свести до выбора каталога и нажатия кнопки. Теперь как пытаюсь решить проблему. Загрузил программу в Макет обработки с типом макета Двоичные данные. И вот тут у меня затык. Гугл дает совет, что нужно программно сохранять из макета ехе-файл на диск и там уже запускать с нужными параметрами. Так ли это на самом деле? В и-нете нашел древнюю обработку Asmody, где он не сохраняет приложение на диск, а запускает как-то прямо так. К сожалению, она по каким-то причинам не работает - приложение действительно запускается (даже без сохранения на диск), но потом аварийно закрывается. Не удалось разобраться в чем причина, но факт того, что обработка запустила исполняемый файл без сохранения на диск - есть. Вопрос: как это сделать? Основной код из обработки Asmody прилагаю (обработка распространялась бесплатно и поэтому, надеюсь, я не нарушаю его авторских прав, выкладывая код здесь): |
|||
1
napagokc
30.10.13
✎
14:58
|
+(0) Код:
Var __ExecFiles; Var __IMDir; // основная реализация библиотеки function __getModule(module = "mogrify", include_path=false) __execModule = ""; if not __ExecFiles.Property(module, __execModule) then __execModule = module+".exe"; bin=GetTemplate(module+"_exe"); bin.write(__IMDir+__execModule); __ExecFiles.insert(module,__execModule); endif; return ?(include_path, __IMDir, "")+__execModule; endfunction function __saveToIM(picture, picture_name="", include_path=false) export if typeof(picture)=type("Картинка") then if picture_name="" then picture_name=string(new UUID())+".jpg"; endif; if picture.format()<>ФорматКартинки.JPEG then picture=convert(picture); endif; picture.write(__IMDir+picture_name); return ?(include_path, __IMDir, "")+picture_name; else raise("Save file error: it is not a picture."); return undefined; endif; endfunction function convert(picture, toFormat="JPG") export __execMogrify = __getModule("mogrify"); picture=picture.convert(ФорматКартинки.PNG); tempName=string(new UUID()); picture.write(__IMDir+tempName+".png"); commandLine=""""+__execMogrify+""" -format "+toFormat+" """+tempName+".png"""; Сообщить(commandLine); System("start """" /WAIT /MIN "+commandLine, __IMDir); picture=new Картинка(__IMDir+tempName+".jpg"); DeleteFiles(__IMDir, tempName+".*"); return picture; endfunction function resize(picture, picture_name="", x_size=200, y_size=200) export __execMogrify = __getModule("mogrify"); if typeof(picture)=type("Картинка") then pic_file=__saveToIM(picture, picture_name); elsif typeof(picture)=type("Строка") then __file=new file(__IMDir+picture); if not __file.exist() then raise("File not found: "+__IMDir+picture); return undefined; endif; pic_file=picture; endif; commandLine=""""+__execMogrify+""" -resize "+format(x_size,"ЧГ=")+"x"+format(y_size,"ЧГ=")+" """+pic_file+""""; Сообщить(commandLine); System("start """" /WAIT /MIN "+commandLine, __IMDir); picture=new Картинка(__IMDir+pic_file); DeleteFiles(__IMDir, pic_file); return picture; endfunction function rotate(picture, picture_name="", degree=90) export __execMogrify = __getModule("mogrify"); if typeof(picture)=type("Картинка") then pic_file=__saveToIM(picture, picture_name); elsif typeof(picture)=type("Строка") then __file=new file(__IMDir+picture); if not __file.exist() then raise("File not found: "+__IMDir+picture); return undefined; endif; pic_file=picture; endif; commandLine=""""+__execMogrify+""" -rotate "+format(degree,"ЧГ=")+" """+pic_file+""""; Сообщить(commandLine); System("start """" /WAIT /MIN "+commandLine, __IMDir); picture=new Картинка(__IMDir+pic_file); DeleteFiles(__IMDir, pic_file); return picture; endfunction |
|||
2
napagokc
30.10.13
✎
15:05
|
...или он сохраняет все-таки ече-файл на диск, а потом удаляет. Сейчас только начал внимательно вчитываться...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |