GraphicsNET (GraphicsVK) - внешняя компонента для работы с графическими изображениями

GraphicsNET (GraphicsVK) - внешняя компонента для работы с графическими изображениями

Ежедневно приходится грузить большое количество картинок в базу данных. Чтобы автоматизировать процесс изменения размеров написал внешнюю компоненту для работы с изображениями. Хотя функционал не ограничивается одним только ресайзингом.


02.09.2010 11:58 [01.10.2010 10:48] (salexdv) Александр Шкураев 58 [+] [−] Перейти к публикации

Страницы: 1
1.
Alxd 02.09.10 14:37 URL

Исправил недочет с прозрачными областями png при наложении "водяного знака"

2.
detec (файл скачал) 02.09.10 14:38 URL

А какой командой добавлять компоненту в Windows?

Ответили: (3)

3.
Alxd 02.09.10 14:42 URL

(2) regsvr32 <ПутьККомпоненте>

Ответили: (6)

4.
AlexBugs (файл скачал) 02.09.10 15:12 URL

А в 7.7 точно работает? Может пример есть? :)

Ответили: (5)

5.
Alxd 02.09.10 16:01 URL

(4) В 7.7 точно работает

Код
ЗагрузитьВнешнююКомпоненту(<ПутьКВК>);
Graphics = СоздатьОбъект("AddIn.GraphicsVK")

6.
detec (файл скачал) 02.09.10 16:02 URL

(3)

Спасибо! Так сейчас и сделал, При регистрации ошибок не было. Но всё равно не видит компоненту. Запускаю из толстого клиента, на Windows 7 x64. Я выполнял регистрацию из 32-битного cmd.exe

Ответили: (7)

7.
Alxd 02.09.10 16:05 URL

(6) Файл компоненты должен лежать в каталоге исполняемых файлов 1С, либо
В ИмяФайла

Код
ЗагрузитьВнешнююКомпоненту(<ИмяФайла>) 
должн быть указан полный путь к dll

Ответили: (9) (10)

8.
dushelov 02.09.10 16:09 URL

Советую - работать с 1С-ными объектами типа "Картинка" (сделать 3 свойства для 7.7, 8.1 и 8.2 соответственно) и в зависимости от типа платформы возвращать готовый объект, без двоичных данных и промежуточных сохранений в файл.

Ответили: (10)

9.
detec (файл скачал) 02.09.10 16:10 URL

(7) Попробовал зарегистрировать из 63-битного cmd.exe - не заработало. Только когда подкинул dll-ку в каталог 1С 8.2 - только тогда увидело её.

Но т.к. релизы 8.2 очень часто меняются - это паллиатив. Путь к dll-ке я, разумеется, указываю полный.

10.
Alxd 02.09.10 16:13 URL

(8) В будущем так и сделаю
(7) Тут ничего не поделаешь, либо хранить в BIN, либо указывать полный путь.
Кажется, есть еще и третий вариант, но он муторный

11.
detec (файл скачал) 02.09.10 16:19 URL

Кажется, в демо-обработке есть баг. Я выбрал тип файлы - png, а после выбора пути сохранения мне выдало имя bmp.

Ответили: (12)

12.
Alxd 02.09.10 16:23 URL

(11) Значит в поле "Файл для сохранения" было написано ***.bmp, хотя формат сохраненного файла при этом все равно будет png

13.
Abadonna 04.09.10 8:04 URL

(0) Как я понял из заголовка, ВК может работать и с 7.7.
Тогда вопрос: как задать в 7.7 тип Булево?

Цитата
ВПроцентах – признак того, что все величины указаны в процентах. Тип: Булево

Нет его там вообще.

Ответили: (14)

14.
Alxd 04.09.10 10:56 URL

(13) Все просто, для 7.7 будет так:
0 - Ложь
Не нуль - Истина

Ответили: (15)

15.
Abadonna 04.09.10 10:58 URL

(14) У тебя ж не написано, что параметр вариантный, вот я и спросил.
Допиши в описание

16.
Murom (файл скачал) 06.09.10 14:55 URL

Компонента то, что надо. Давно искал что-то подобное т.к. не хотелось мутить через COM.

Ответили: (17)

Изменено: Murom - 06.09.10 15:09
17.
Alxd 06.09.10 15:12 URL

(16) Форматы «водяного знака»:

* bmp
* jpg
* png

Сохрани как png c прозрачностью и все должно стать хорошо

18.
Murom (файл скачал) 07.09.10 16:56 URL

Есть еще вопрос!
Открываю png с прозрачным фоном, меняю размер изображения (растягиваю водяной знак ) потом сохраняю ... и получаю что прозрачный фон заменен на белый.

вкФайлКопирайта.ИзменитьРазмерИзображения(Ширина, Высота, 0, Ложь);
вкФайлКопирайта.СохранитьИзображение("tmp.png", 2, 0, Ложь);

Можно как нибудь сделать , чтоб прозрачный фон сохранялся?

Ответили: (19)

19.
Alxd 07.09.10 17:34 URL

(18) К сожалению png пока не получится записать, сохранив при этом прозрачность. В будущем надеюсь это исправить.

Ответили: (22)

20.
DimaP (файл скачал) 07.09.10 18:38 URL

Плюс - задолался с этим ИмейджМэджик - нифига не работает, аналогично с остальными утилистами консольного преобразования изображений.
Вот только оно как-то долго работает ... smile:(

Ответили: (21)

Изменено: DimaP - 07.09.10 19:04 (Скачал и попробовал)
21.
Alxd 07.09.10 20:52 URL

(20) Зато работает smile:D

22.
Murom (файл скачал) 09.09.10 0:24 URL

(19) Ну, тогда будем ждать новую версию с сохранением прозрачного фона в png.
PS . Реально очень сильно не хватало в 1с функций для преобразования графических файлов.

Ответили: (23) (45)

23.
Alxd 09.09.10 7:26 URL

(22) P.S. Как я тебя понимаю smile:)

24.
srv7 (файл скачал) 09.09.10 16:19 URL

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

Ответили: (25)

25.
Alxd 09.09.10 16:22 URL

(24) Пожалуйста!

26.
Altair777 (файл скачал) 09.09.10 16:33 URL

В архиве лежит Тест1CGraphics.epf
а для 7-ки можно?

Ответили: (27)

27.
Alxd 09.09.10 16:35 URL

(26) Нет, для семерки пример делать нет времени, но там все абсолютно тоже самое.

28.
Murom (файл скачал) 09.09.10 18:09 URL

При наложении в цикле водяного знака (при вызове ДобавитьВодянойЗнак) течет память.
Потом показывается ошибка
GraphicsVK : Some operation could not be performed because the system is out of resources. Close some windows and try again..
Потом
GraphicsVK : Access violation at address 073932D4 in module 'GraphicsVK.dll'. Write of address 00000000 и еще что-то.
И вылетает 1с. Файл подкачки вырастает почти на 1 гб...
Если надо могу пример обработки под 8.1.

Ответили: (29) (36)

29.
Alxd 10.09.10 7:08 URL

(28) Разберусь, отпишусь

30.
iceflash 10.09.10 16:05 URL

На чем написана компонента? (с целью подсказать возможные проблемы/улучшения)

Ответили: (31)

31.
Alxd 10.09.10 16:55 URL

(30) Delphi 7

32.
iceflash 10.09.10 17:04 URL

Так и подумал, но решил уточнить=) Используешь что для работы с изображениями? TJpegImage (вроде так называется) и Tbitmap или стороннее что то?

Ответили: (33)

33.
Alxd 10.09.10 17:10 URL

(32) Используется много чего.
Для хранения текущего изображения TBitmap
Для открытия различных форматов TPicture и TGIFImage (RXLib модуль rxgif)
При сохранении в jpg TJPEGImage
При работе с png используется TPNGObject (модуль pngimage)

34.
iceflash 10.09.10 17:24 URL

Насколько помню вот так с ходу:
1. Не используй Tbitmap
2. Преобразования и битовые операции делай через BitBlt и маски
3. Все перечисленные объекты должны позволять работать не использая Bitmap
4. Самое узкое место всегда тут будет Tbitmap , пробуй указатели либо там есть еще какой то "тип" данных (не помню уже точно) - это даст экономию памяти, а использование процедур апи и работы с маской значительный прирост=)

35.
Alxd 10.09.10 17:26 URL

(34) Спасибо! Буду пробовать различные варианты

Ответили: (35)

Изменено: Alxd - 10.09.10 17:27
36.
Alxd 14.09.10 17:09 URL

(28) Добавил метод "Закрыть()"
При вызове метода высвобождается память занимаемая объектом.
Т.е. порядок работы следующий

Код
Компонента.ПолучитьИзображение(...);
// Различные манипуляции с изображением
Компонента.xxxx();
Компонента.xxxx();
Компонента.СохранитьИзображение(...);
Компонента.Закрыть();

37.
msw2010 (файл скачал) 14.09.10 18:35 URL

Не получилось работать с emf/emz (стандартные форматы Офиса)

Ответили: (38)

38.
Alxd 14.09.10 18:38 URL

(37) Пока работа с emf поддерживается только если изображение находится в буфере обмена. Постараюсь добавить поддержку и в режиме открытия из файла

39.
Alxd 15.09.10 11:16 URL

Добавил поддержку форматов emf и wmf в режиме открытия из файла

40.
msw2010 (файл скачал) 16.09.10 9:49 URL

пробовал открыть emf через тест: ошибок не даёт, размеры картинки правильные, картинка пустая smile:(

Ответили: (41)

41.
Alxd 16.09.10 9:52 URL

(40) Сбросте файл на "alxd" собачка "inbox.ru", я посмотрю

42.
msw2010 (файл скачал) 21.09.10 15:29 URL

очень хочется поддержку emf smile;)

Ответили: (43) (44)

43.
Alxd 21.09.10 15:34 URL

(42) Практически готова новая версия компоненты (написана с нуля и на др. языке), которая будет полностью поддерживать emf. Скоро размещу здесь. Если есть желание могу дать потестить smile;)

44.
Alxd 22.09.10 11:31 URL

(42) Пробуйте новую версию

45.
Alxd 22.09.10 11:39 URL

(22) Попробуйте новую версии программы (добавил сохранение прозрачности фона у png)

46.
msw2010 (файл скачал) 24.09.10 21:25 URL

Спасибо большое! Работает нормально. smile;)

47.
maljaev 01.10.10 10:30 URL

Про библиотеку GflAx не забывайте. В ней функционала-то поболее будет. Хотя я и приветствую новые разработки, если в них действительно что-то новое есть, а так какой смысл изобретать велосипед.

Ответили: (48)

48.
Alxd 01.10.10 10:41 URL

(47) Видел я эту библиотеку. Да функционал у нее богаче, НО!
1) С ее помощью не нашел как добавлять без заморочек водяной знак
2) GraphicsNET - лишь часть (которой решил поделится) большой компоненты , используемой в моей конфигурации.
Согласитесь, удобнее пользоваться одной компонентой и, что не мало важно, дорабатывать ее функционал, чем использовать несколько различных решений.

Ответили: (50)

49.
Alxd 01.10.10 10:49 URL

Исправил ошибку с вычислением координат водяного знака, когда он размещается в центре изображения

50.
maljaev 01.10.10 12:26 URL

(48) Можно добавить водяной знак, с заморочками или без - это уж от опыта использования зависит. А вот насчет большой компоненты - это интересненько, можешь хотя бы вкратце сказать что туда входит? Выкладывать демку в широкие массы не собираешься?

Ответили: (51) (56)

51.
Alxd 01.10.10 12:35 URL

(50) Выкладывать не собираюсь. Просто собрал в одном месте все необходимые для работы данной конфы полезности, ну например, получение хеша MD5, быстрое извлечение данных из очень большого XML (700-800 мб) в txt, и т.п.

52.
mevgenym (файл скачал) 01.10.10 13:09 URL

В обработке. "Уменьшить на" действует только на ширину, причем иногда и пропорционально, примерно с третьего подрят клика начинает уменьшать только ширину.

Ответили: (53)

53.
Alxd 01.10.10 13:16 URL

(52) Действительно, есть косяк с потерей пропорциональности. Исправлю. Спасибо за наблюдательность!

54.
Поручик (файл скачал) 04.02.11 0:32 URL

При получении изображения из буфера обмена ПолучитьИзображение("") выскакивает раздражающее окно. Нельзя ли его выбросить нафиг?
Второй вопрос по поводу использования библиотеки в составе сторонних обработок.

Ответили: (55)

55.
Alxd 09.02.11 16:06 URL

(54) По поводу окна проверю.
А в составе сторонних обработок можете пользовать сколько душе угодно

56.
Pilokarpios 18.02.11 13:53 URL

Хелп, протестил компоненту 1С 8.2. все работает!

а на 1С 77 не работает, что может быть?

ЗагрузитьВнешнююКомпоненту(ПолныйПутьККомпоненте);
ГрафикаВК = СоздатьОбъект("AddIn.GraphicsNET");

Код
Пока Цикл

   ГрафикаВК.ПолучитьИзображение(ПутьКФайлуИсточник);
   Размер = Число(-30);
   ГрафикаВК.ИзменитьРазмерИзображения(ГрафикаВК.Ширина,,Размер,1);
   Сжатие = Число(50);
   ТипФайла = "jpg";
   ГрафикаВК.СохранитьИзображение(ПутьКФайлуСохранение,ТипФайла,Сжатие,0);

КонецЦикла;

ГрафикаВК.Закрыть();


Повторюсь, на 1с82 на том же компе работает

Ответили: (57)

57.
Alxd 18.02.11 14:12 URL

(56) Во-первых, вместо

Код
ЗагрузитьВнешнююКомпоненту(ПутьКФайлуИсточник);

следует писать
Код
ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET");


И еще, метод СохранитьИзображение во втором параметре принимает не стороку, а число
0 – bmp
1 – jpg
2 – png

И все будет работать

58.
Pilokarpios 18.02.11 14:16 URL

ок, спасибо,работает, воспользовался GraphicsVK, её проще удаленно зарегистрировать regsvr32

Ответили: (59)

59.
Alxd 18.02.11 14:21 URL

(58) Вот только функционалом она не блещет smile:)

60.
Pilokarpios 18.02.11 14:32 URL

Мне главное сжать размер до 10%, остальное неважно

Есть проблема,

Пользуюсь все же:

Код
ЗагрузитьВнешнююКомпоненту("GraphicsVK.dll");
ГрафикаВК = СоздатьОбъект("AddIn.GraphicsVK");


Все работает, но, пока программу не завершить (1cv77.exe), папка сохранения фотографий залочена компонентой, не удалить.

Даже если:

Код
Процедура ПриЗакрытии()
ГрафикаВК = 0;
КонецПроцедуры

61.
Alxd 18.02.11 14:45 URL

(61) А вот это нехорошо, конечно. Посмотрю, как будет время

Ответили: (61)

63.
cool.vlad4 08.09.11 16:03 URL

Есть золотая библиотека cxImage к которой также написаны ActiveX. Не требует dotnet. Советую для конвертирования, изменения, сжатия изображений.

64.
vitalya24 (файл скачал) 09.09.11 3:13 URL

очень полезная штука, автору респект. Не очень удобно что нет метода который бы выводил размер файла картинки, хоть в 1с и есть такой метод, но здесь было бы удобнее

Ответили: (65)

65.
Alxd 09.09.11 8:31 URL

(64) Спасибо! Если все таки дойдут руки до расширения функционала, обязательно добавлю этот метод.

66.
prophetic (файл скачал) 07.11.11 9:57 URL

Благодарю за компоненту. Используется на живую для обработки выгрузки из 1С на веб-сайт. Успехов!

67.
suneagle 14.11.11 11:14 URL

Хорошая компонента, но у меня не получилось ее запустит на сервере.
Насколько я понимаю загвоздка в:

Код
ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET");

В таком виде запуск на сервере не возможен, а как изменить для регистрации на сервере так и не разобрался. Для данной библиотеки это возможно?

Ответили: (68)

68.
Alxd 14.11.11 19:22 URL

(67) Нет, данная библиотека не будет работать на сервере

69.
a_mironov 11.12.11 4:40 URL

исходники есть?

Ответили: (70)

70.
Alxd 11.12.11 14:36 URL

(69) Reflector в помощь ;-)

71.
ErrorEd88 (файл скачал) 30.01.12 18:59 URL

У меня есть одна УТшка, где 7000 наименований номенклатуры и все с картинками. База файловая, очень сильно тормозит. Поможет ли мне эта разработка ускорить работу базы?

Ответили: (72)

72.
Alxd 30.01.12 19:12 URL

(71) Эта компонента может помочь автоматизировать процесс сжатия(ресайзинга) изображений, что поможет уменьшить размер базы. Но вообще хранить 7000 картинок в файловой базе, по-моему, кощунство

Ответили: (73)

73.
ErrorEd88 (файл скачал) 30.01.12 19:42 URL

(72) Знаю, причуда клиента.

74.
Denis_Shiln (файл скачал) 01.02.12 15:34 URL

Не могу подключить к 7-ке. Windows XP, DLL-ка находится в BIN 1С-ки
на

Код
ПодключитьВнешнююКомпоненту(GraphicsNET.dll);
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");


Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует CLSID)
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
{F:\BASE\...\PRICE.ERT(975)}: Неудачная попытка создания объекта (AddIn.GraphicsVK)

а на
Код
ЗагрузитьВнешнююКомпоненту(GraphicsNET.dll);
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");


Ошибка при создании объекта из компоненты C:\Program Files\1Cv77\BIN\GraphicsNET.dll (отсутствует интерфейс IInitDone)
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
{F:\BASE\...\PRICE.ERT(977)}: Неудачная попытка создания объекта (AddIn.GraphicsVK)

Ответили: (75)

75.
Alxd 01.02.12 15:55 URL

(74)

Код
ЗагрузитьВнешнююКомпоненту(<ПутьКDLL>);
Graphics = СоздатьОбъект("AddIn.GraphicsNET");

Изменено: Alxd - 01.02.12 15:56
Страницы: 1

58 [+] [−] Перейти к публикации