|
Программно навесить вотермарки на фото | ☑ | ||
---|---|---|---|---|
0
Kleopatra2803
22.08.14
✎
09:30
|
Доброе утро!
Есть файл Excel с гиперссылками на картинки. Задача состоит в том, чтобы загрузить гиперссылки в 1С, затем в коде достать из них картинки (у меня они достаются во временные файлы), затем через внешнюю программу навесить на эти картинки вотермарки и сохранить в папке на компьютере. Внешнюю программу я запускаю через ЗапуститьПриложение(...). В первый параметр передаю командную строку, во втором по справке должен быть текущий каталог (я переписываю его из командной строки). Но картинка в папке на компьютере не создается. Проверяю в отладчике, как доходит до строки ЗапуститьПриложение() сразу попадает в исключение (я делаю через попытку - исключение). Если полученную в отладчике строчку копирую в командную строку, то картинка с вотермаркой создается. Подозреваю, что проблема может быть в параметре "ТекущийКаталог". Помогите найти ошибку, пожалуйста РазбитьСсылку = ПарситьГиперссылку(Фото); Соединение=Новый HTTPСоединение(Строка(РазбитьСсылку.Сервер)); ИмяВременногоФайла=ПолучитьИмяВременногоФайла(".jpg"); Соединение.Получить("/" + РазбитьСсылку.ПутьКФайлу,ИмяВременногоФайла); ИмяФайлаСВотермаркой = "D:\Разработка\Фото\" + Номен.Код + ".jpg"; ЗапуститьПриложение("""D:\Разработка\ImageMagick\composite.exe"" -dissolve 20% -tile ""D:\Разработка\ImageMagick\WATERMARK_FILE.jpg"" " + + """" + ИмяВременногоФайла + """" + " " + """" + ИмяФайлаСВотермаркой + """", "C:\Users\1ce"); |
|||
1
manyak
22.08.14
✎
09:36
|
убери исключение, посмотри описание ошибки
|
|||
2
Kleopatra2803
22.08.14
✎
09:38
|
(1) я в исключение пишу Сообщить(ОписаниеОшибки()) почему-то в исключение отладчик заходит, но описание ошибки не выдает
|
|||
3
dk
22.08.14
✎
09:41
|
попробуй сама в командной строке запустить то, что в 1с не получается запустить
------- может проблема в кодировке, кавычках, пробелах, длине строки ... |
|||
4
manyak
22.08.14
✎
09:43
|
(3)
"Если полученную в отладчике строчку копирую в командную строку, то картинка с вотермаркой создается" типа робит говорит :) (2) убери ветвление на исключение, и посмотри на ошибку на которую платформа ругаться будет |
|||
5
Kleopatra2803
22.08.14
✎
09:43
|
(3)в командной строке все запускается и работает и картинка создается. Сначала у меня было без кавычек, потом решила добавить кавычки, в командной строке работает так и так
|
|||
6
Kleopatra2803
22.08.14
✎
09:45
|
(4) "типа робит говорит :)" это ты о чем?)
|
|||
7
manyak
22.08.14
✎
09:46
|
сделай переменную строка_запуска и в ней пропиши ручками без переменных скопированную строку
потом ЗапуститьПриложение(строка_запуска) и проверь - если работает, значит ошибка в соединении строковых переменных |
|||
8
dk
22.08.14
✎
09:47
|
код выполняется на сервере 1С? там другие пути )
|
|||
9
Kleopatra2803
22.08.14
✎
10:07
|
(8) Забыла сказать это все на управляемых формах УТ 11.1.4.10 в файловом режиме. Процедура с директивой на сервере
|
|||
10
marty0701
22.08.14
✎
10:16
|
Вот кусок г..., всмысле кода, попробуй использовать COM, все работает.
Попытка Magick = Новый ComОбъект("ImageMagickObject.MagickImage.1"); Исключение Сообщить("Не удалось создать COM объект ImageMagickObject, возможно библиотека не зарегистрирована в системе.", СтатусСообщения.Внимание); Предупреждение("Выполенние обработки завершено с ошибками.", 25); Возврат; КонецПопытки; Попытка ФайлКартинка = Новый COMОбъект("WIA.ImageFile"); Исключение Сообщить("Не удалось создать COM объект WIA.ImageFile, возможно библиотека не зарегистрирована в системе.", СтатусСообщения.Внимание); Предупреждение("Выполенние обработки завершено с ошибками.", 25); Возврат; КонецПопытки; КонецЕсли; Для Каждого Файл Из МассивФайлов Цикл ОбработкаПрерыванияПользователя(); н=н+1; Если н=1 ИЛИ Цел(н/10)=н/10 ИЛИ н=Всего Тогда ФормаПроцесса.ЭлементыФормы.ИндикаторПроцесса.Значение=н; ФормаПроцесса.ЭлементыФормы.ТекущийЭлемент.Заголовок=Файл.Имя; КонецЕсли; Код=""; Попытка Выполнить("Код="+Выражение); Исключение Сообщить("Ошибка при выполнении выражения получения кода номенклатуры из имени файла."+Символы.ПС+ОписаниеОшибки(),СтатусСообщения.Внимание); Прервать; КонецПопытки; Если НЕ ФИменаФайлоВВвидеКода Тогда Код = Прав(Код, СтрДлина(Код) - Найти(Код, ")")); Код = СтрЗаменить(Код, Символы.НПП, " "); Код = СокрЛП(Лев(Код, СтрДлина(Код) - Найти(Код, " "))); КонецЕсли; ПутьКФайлу = Файл.ПолноеИмя; ВременныйИмяФайла = Файл.ИмяБезРасширения + "_WM" + ".jpg"; ФайлСВЗ = КаталогИзображений + "\" + ВременныйИмяФайла; Если ВнедрятьВодянойЗнак Тогда Magick.Composite("-watermark", "5", "-gravity", "center", ПВВодянойЗнак, ПутьКФайлу, ФайлСВЗ); КонецЕсли; |
|||
11
Kleopatra2803
22.08.14
✎
10:20
|
(7), (10) сейчас попробую
|
|||
12
Kalambur
22.08.14
✎
10:27
|
Вот смотрю как мучается с этим 1С умная,красивая. Нафиг тебе этот 1С? )
|
|||
13
Kleopatra2803
22.08.14
✎
10:32
|
(12) я же говорю, у меня какая-то нездоровая эйфория от 1Ски)))
|
|||
14
katc
22.08.14
✎
10:39
|
версия файловая или серверная?
Может для пользователя, под которым запущен сервер 1С, запрещены действия или еще что |
|||
15
Kleopatra2803
22.08.14
✎
10:43
|
(14) Файловая. Пользователь с полными правами
|
|||
16
Kleopatra2803
22.08.14
✎
15:55
|
Большое всем спасибо! Исправила. Сейчас у меня Фотки сохраняются в папку на компьютере, фотки с водяными знаками сохраняются в другую папку на компьютере. Проблема была в кавычках, и в том, что я командную строку переносила на другую строку, так как она была очень длинная. В общем, может кому-нибудь поможет:
МассивКартинок = НайтиФайлы("D:\Разработка\Фото\Foto1", "*.jpg"); ФотоСВодянымЗнакомЗагружено = Ложь; Для Каждого ФайлКартинки Из МассивКартинок Цикл ПолноеИмяФайлаСВодянымЗнаком = "D:\Разработка\Фото\Foto2\" + ФайлКартинки.Имя; Попытка ЗапуститьПриложение("D:\Разработка\ImageMagick\composite.exe -dissolve 20% -tile D:\Разработка\ImageMagick\WATERMARK_FILE.jpg " + ФайлКартинки.ПолноеИмя + " " + ПолноеИмяФайлаСВодянымЗнаком); ФотоСВодянымЗнакомЗагружено = Истина; Исключение Сообщить("Для номенклатуры " + НайтиНоменклатуруПоКоду(ФайлКартинки.ИмяБезРасширения) + " фото с водяным знаком не загружено!"); Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; Если ФотоСВодянымЗнакомЗагружено Тогда Сообщить("Фото номенклатуры с водяными знаками загружено в папку D:\Разработка\Фото\Foto2"); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |