Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите внешнюю компоненту для работы с изображениями
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Fabri
Подскажите, возможно кто-то встречался. Нужно изменять размер изображения при выводе на печать. На макете объект Картинка, туда выводится основное изображение номенклатуры из базы , т.е.
ОбластьМакета.Рисунки.РисунокНоменклатуры.Картинка = Номенклатура.ОсновноеИзображение.Хранилище.Получить();

Все бы ничего, если б не одно НО. В макете выводятся не одно изображение, а 200-300, это каталог товаров. При сохранении данного каталога в pdf для пересылке клиентам
к примеру, получается что в поле картинки выводится все изображение, размером по 300-400 кб, и вместе все картинки создают нехилый такой pdf на 100-200 Мб, что вызывает неудобства.

Возможно кто-то встречал внешнюю компоненту, которая работает не только с файлами с диска, ато все которые перебирал работают только с файлами (изображениями) с диска, но никак не могут работать с получаемыми
Номенклатура.ОсновноеИзображение.Хранилище.Получить();

Заранее спасибо.

P.S. Конечно можно сохранять изображения номенклатуры во временную папку на диске, потом изменять и выводить в макет, потом удалять с диска изображение, но это приведет к медлительному процессу и фрагментации диска.
Ardi
можно ж уменьшенные копии хранить в базе.
если отсутствует при печати - генерировать и добавлять в базу.
а при изменении основного изображения удалять автоматом.
--
А еще пдф принтеры умеют сжимать картинки в файле.
zetovich
+ТС у меня наблюдается проблема когда количество картинок в документе > 1000. Картинки маленькие. Но на последних начинает выводить пустые картинки. Беда просто sad.gif
Fabri
Цитата(Ardi @ 27.03.14, 17:51) необходимо зарегистрироваться для просмотра ссылки
можно ж уменьшенные копии хранить в базе.

В смысле паралельно основным? Основные у меня хранятся в разрешении 1024х768 так как выгружаются на сайт. Естественно размер 200-300 кб.
В базе около 17000 товаров и она и так весит уже более 3.5 Гб. Если я ещё начну миниатюры создавать для каждого изображения, то одно что база увеличится, так ещё
и "загадится" лишними миниатюрами и производительность упадет.
Vofka
Fabri, считается, можно сказать, стандартным решением, когда картинки хранятся не непосредственно в базе, а хранятся где-то отдельно в файловом хранилище. Это решает те проблемы, которые вы озвучиваете.
Fabri
Vofka, я это понимаю, но сейчас уже менять что-то не очень хочется...
onsamuy
На Вашем месте я бы все таки прислушался к советам Vofka...
Fabri
Ок. В типовой конфигурации УТ 2.3 для Украины присоединенные файлы хранятся в базе данных. Если есть мануал, описание или другая информация по переносу прикрепленных файлов на диск, буду рад получить ссылку. Спасибо.
Самое главное чтобы это было "безболезненно" и в дальнейшем файлы выгружались с 1С на сайт и т.д.
Vofka
Fabri, какой мануал? Пишете обработку, которая обходит справочник номенклатуры, смотрит есть ли там картинка, если есть - ложит её куда-то и из справочника удаляет. После этого (или перед этим) дорабатываете формы, где используется показ картинки, чтобы картинка бралась не из справочника, а откуда-то и показывалась. Вот это куда-то - это будет, например, какая-то константа в которой будет храниться путь каталогу картинок.
Fabri
Это конечно не вопрос сделать, но вот если бы только переписать код на формах где выводятся изображения. Тут ещё прийдется и обработку ОбменССайтом менять, искать и т.д.
Хотя если канеш база начнет "тупить" до невозможности, то прийдется так сделать, а если чисто для того, что я писал выше, из-за чего начинал данную тему, то мне проще уже будет -
Цитата
P.S. Конечно можно сохранять изображения номенклатуры во временную папку на диске, потом изменять и выводить в макет, потом удалять с диска изображение.
.
Спасибо всем.
Fabri
Если кому-то интересно, расскажу как решил данную задачу.
Для изменения размера изображения использовал ActiveX-библиотеку GflAx.
Получается немного через ж.., но все ж работает.
Код:
        Картинка = Новый Картинка;
        Картинка = ТекущаяСтрока.Номенклатура.ОсновноеИзображение.Хранилище.Получить();
        ИмяВременногоФайла = Строка("c:\temp\" + ТекущаяСтрока.Номенклатура.УникальныйИдентификатор() + ".jpg");
        Картинка.Записать(ИмяВременногоФайла);
        Объект = Новый COMОбъект("GFLAX.GFLAX");
        Объект.LoadBitmap(ИмяВременногоФайла);
        Объект.Resize(200,200);
        Объект.SaveBitmap(ИмяВременногоФайла);
        Картинка = Новый Картинка(ИмяВременногоФайла);
        УдалитьФайлы(ИмяВременногоФайла);

        ОбластьКаталога.Рисунки.Рисунок.Картинка = Картинка;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.