Сжатие JPEG и наложение на него водяного знака

09.02.12

Разработка - Разработка внешних компонент

Искал чего-нибудь простое для решения вопроса "Как сжать JPEG и наложить водяной знак".
То ли плохо искал, то ли еще никому это не надо было (что вряд ли), посему наваял свое.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
JPGResize.exe
.exe 537,50Kb
206 2 500 руб. Купить
watermark.png
.png 3,85Kb
43 2 500 руб. Купить
ImgResize_Ishodniki
.zip 399,63Kb
64 2 500 руб. Купить
ImgResize.zip
.zip 300,57Kb
67 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Задача:

  1. Изменить размеры JPG фала до нужного размера
  2. Применить компрессию к файлу
  3. Наложить водяной знак

Во вложении exe файл, запускать с ключами:

JPGResize.exe ключ1 ключ2 ключ3 ключ4 ключ5

ключ1 - "имя исходного файла"

ключ2 - "имя файла назначения"

ключ3 - высота новой картинки

ключ4 - ширина новой картинки

ключ5 - "файл с водяным знаком" (png)

Все ключи обязательны!!!

Написано минут за 15.

Размещение водяного знака в нижней части изображения.

Баги могут возникать:

  1. Если передавать имена файлов с пробелами не в кавычках, в остальном должно работать
  2. Если передать дробные размеры высоты и ширины
  3. Если не указан один из ключей

Если будет кому-нибудь полезно, сделаю проверки :)

P.S. При чем здесь 1С? Наверно при том, что реализовать данную штуку пришлось потому, что файлы прикреплены к номенклатуре и сертификатам в 1С

P.S.2 По просьбам трудящихся, в файле JPGResize.zip выложил исходники на Delphi7, если кто-то сделает из нее dll, чтобы она в 1С цеплялась, минимум + гарантирую :)

P.S.3 функционал частично перенесен в //infostart.ru/public/59436/#postform (197 пост)

UPGRADE:

P.S.4 Сделал таки DLL. Пример использования:

ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"ImgResize.dll")

ИМЖ = СоздатьОбъект("AddIn.ImgResize");

ИМЖ.ПережатьФайл("ИсходныйФайл", "КонечныйФайл", Высота, Ширина, "WaterMark.png");

ИМЖ.ConvertFile("ИсходныйФайл", "КонечныйФайл", Высота, Ширина, "WaterMark.png");

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Разработка внешних компонент WEB-интеграция Программист 1С:Предприятие 7.7 1C77 Платные (руб)

Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async можно наладить обмен данными между удаленными информационными базами по протоколам HTTP, HTTPS и WebSocket. С помощью компоненты HttpSrv7 используя протокол WebSocket можно создавать и поддерживать работу нескольких чатов. С помощью компоненты HTTP_Async можно асинхронно отправлять HTTP-запросы к сайтам, веб-сервисам (в т.ч. к HTTPSrv7) и обрабатывать ответы по мере их поступления. Компонента GISMT в дополнение к HTTP_Async имеет функцию цифровой подписи в формате Base64 и, таким образом, имеет все возможности для работы с API ГИС МТ "Честный знак" непосредственно из среды 1С 7.7.

6100 руб.

27.05.2022    12696    2    20    

39

Работа с интерфейсом Логистика, склад и ТМЦ Системный администратор Программист Пользователь 1С:Предприятие 7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

2500 руб.

18.10.2022    8252    4    45    

7

Разработка внешних компонент Системный администратор Программист 1С:Предприятие 7.7 1С:Предприятие 8 Россия Платные (руб)

Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.

7320 руб.

19.04.2023    6912    1    0    

3

Разработка внешних компонент Программист 1С:Предприятие 7.7 Платные (руб)

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

5084 руб.

02.12.2021    7870    3    19    

5

Разработка внешних компонент WEB-интеграция Программист 1С:Предприятие 7.7 Абонемент ($m)

Компонента позволяет использовать различные веб-сервисы интернет-ресурсов, например работать с онлайн-кассой через API, предоставленное ее разработчиком. Тестировалась на платформе 1С релиза 7.70.027.

1 стартмани

14.11.2019    23274    135    mdbruyfn    110    

19

Разработка внешних компонент ККМ Кассовые операции Системный администратор Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Внешняя компонента - оболочка для работы в среде 1С 7.7 или 1С 8.1 с последними версиями драйверов ККМ от АТОЛ. Поддерживаются драйвера x32 начиная с версии 9.11. Присутствует внешняя обработка для полноценной работы с данными драйверами (поддержка ревизий 2.0, 2.1, 2.2, поддержка протокола ОФД 1.0, 1.0.5, 1.1).

1 стартмани

09.08.2017    58029    354    asdfghgghjdhg    141    

18

Разработка внешних компонент Программист 1С:Предприятие 7.7 1C77 Россия Бесплатно (free)

Обновленная версия внешней компоненты для работы с базами данных SQLite и прямыми запросы в ДБФ-базах 1С.

07.11.2016    35619    99    Djelf    43    

37
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ЗАК 16.07.10 14:55 Сейчас в теме
А исходники публиковать не будешь ? :)
8. maxpiter 150 19.07.10 10:07 Сейчас в теме
(1) (5) исходники на Delphi7 в архиве. Если сделаете из исходников dll которая в 1С будет цепляться, цены вам не будет ;)
ЗАК; zuza; +2 Ответить
2. maxpiter 150 16.07.10 15:15 Сейчас в теме
Чтобы исходники выкладывать, надо их причесывать, чтобы не стыдно за них было :)
3. zuza 321 16.07.10 17:24 Сейчас в теме
(3) Спасибо, то что нужно.
4. Armando 1402 16.07.10 20:14 Сейчас в теме
5. DoctorRoza 18.07.10 10:59 Сейчас в теме
Старина! :) Давай исходники, хоть криво и косо написанные, зато до ума доведем! ;)
6. CheBurator 3234 18.07.10 17:26 Сейчас в теме
ну тогда заодно сделал бы ключяи дл яполучения размеров исходного изображения (хотя и штатно можно получить)
7. maxpiter 150 18.07.10 17:32 Сейчас в теме
to CheBurator
не понял че за ключи? чтобы передавать значение имеющегося изображения что ли?
размер исходного изображения получаю внутри программы и в зависимости от того какая сторона больше по той и уменьшаю до заданного размера в ключ3 или ключ4, а вторую сторону пропорционально.

Код в понедельник залью.
9. markers 279 21.07.10 10:55 Сейчас в теме
Всё это конечно замечательно, но к сожалению без танцев с бубном (Точней с COM`ом) запустить внешнее приложение под Сервер 1С низя :( а иногда это бывает очень нужно. + Что тоже тупо нельзя под сервер 1С использовать ВК. :( Тока COM`ы а сами понимаете что 1С не идеальна в плане возможностей... :(
10. maxpiter 150 21.07.10 11:00 Сейчас в теме
(9) а зачем запускать данное приложение под сервер 1С? (хотя оно и должно запуститься)
Подразумевается, что эта ... как ее назвать, "штука", обрабатывает картинку по ключам. Ее можно запустить из 1С или через батник, или еще как хочешь, главное ключи передать.
Тут я немного другую цель преследую, нежели запуски под сервер 1С :)
11. markers 279 21.07.10 11:39 Сейчас в теме
(10) Да я понимаю что другие цели, это просто наболело (крик души) что хотелось бы запускать приложения под сервером 1С, а низя (Ни там батник ни через что-то другое, только через вызов COM объекта VBScript и скармливая скрипт запускающий приложение, и то не нашёл как запустить с ожиданием выполнения) По этому тривиальную задачу запустить распаковку архива и подождать пока распакуется архив (Не обязательно ZIP) под сервером 1С пришлось реализовывать через одно место. Вам в любом случае +
ЗЫ: Под сервером 1С я понимаю регламентное задание выполняемое на сервере 1С
13. maxpiter 150 21.07.10 12:30 Сейчас в теме
(11) по работе с архивами, может поможет:
Работа с zip-архивами с помощью UtilZip.dll. http://infostart.ru/public/20800/

вообще, немного не понятно, что вы имеет ввиду под "сервер 1С" - это в вашем понимании выделенный сервер на котором крутится база 1С или это приложение "сервер 1С" для 8 ?
15. markers 279 21.07.10 13:08 Сейчас в теме
(13) Чистая поддержка Зип есть и внутри 8-ки (вроде и под сервером работает), но мне надо было реализовать автораспаковку заказов клиентов которые могут быть пожаты и в RAR и прочие... Речь о сервере идёт в том ключе что когда 1С 8 работает с БД например MS SQL Server она работает через Сервер 1С и регламентные задания выполняются именно на сервере 1С в котором реализованы не все процедуры и функции что реализованы в клиенте 1С. Что накладывает определённые проблемы.
17. Душелов 4026 21.07.10 14:06 Сейчас в теме
+(15) и внешние компоненты не работают в контексте сервера
20. markers 279 21.07.10 14:38 Сейчас в теме
(17) Да, я писал об этом выше, я вообще не понимаю 1С ну ладно вы в целях безопасности или ещё чего запретили вызов внешних приложений, но зачем использование ВК обламывать? :( Может в тех целях что будут юзать Вкашки и внешние приложения с интерфесом пользователя и ожиданием команды от него, но коли уже программист пишет для сервера 1С я думаю он должен догадыватся что если он будет использовать ВК требующее взаимодействие с пользователем оно просто "повиснет"... Вообщем не понимаю я 1С. Вещь (регламентные задания они придумали классную (Юзаю в доль и попирёк)), но как-то недоработали её... Ах, а чего только бы нельзя было сделать в регламентном!!!! *мечтательно*
18. maxpiter 150 21.07.10 14:13 Сейчас в теме
(15) а такой код там будет работать?
код под 7ку, на 8ке сходу не знаю как написать, но переделать наверно не проблемно.

exe = Создатьобъект("WScript.Shell");
exe.EXEC("calc.exe");
exe=0;

или WScript.Shell тоже относится к ВК?
19. markers 279 21.07.10 14:33 Сейчас в теме
(18) Почти такой код будет работать, но насколько я помню он без ожидания! Т.е. запустил и пошёл в 1С код дальше.... а хотелось бы уж если пользоватся комом с ожиданием выполнения.
21. maxpiter 150 21.07.10 14:38 Сейчас в теме
(19) да, без ожидания, но для конвертации картинки этого будет достаточно.
Можно повесить цикл до 1000 и проверять в нем, не появился ли новый файл.
Если не появится, то можно куда-нибудь послать уведомление, что где-то косяк.

Понимаю что с циклом не красиво, но при небольших количествах изображений, может и подойдет.
22. markers 279 21.07.10 14:43 Сейчас в теме
(21) в таких ситуациях считаю использование ком неоправданным, уж лучше тогда как у меня сделано (тоже криво) стоит программа nnCron которая следит за изменением определённой папки, 1с туда ложит архив и так-же в цикле ждёт, nnCron увидев архив тут же его распоковывает 7zипом (Он поддерживает тучу архивов включая RAR), 1С переодически с задержками смотрит появились ли файлы, если появились перестаёт циклить и начинает их обрабатывать дальше.
23. markers 279 21.07.10 14:45 Сейчас в теме
Продолжение (22), просто в моём случае nnCron используется и так постоянно, следовательно я не буду тратить лишних ресурсов и т.д. на открытие в 1С COM
25. maxpiter 150 21.07.10 14:50 Сейчас в теме
(23) вот с ожиданием завершения

Функция Ждемс()
exe = СоздатьОбъект("WScript.Shell");
exe.Run("calc.exe",1,1);
exe = 0;
Возврат 1;
КонецФункции

Процедура Сформировать()
Сообщить(Ждемс());
КонецПроцедуры
12. markers 279 21.07.10 12:13 Сейчас в теме
Как пример зачем мне эта прога под сервером 1С, у меня в номенклатуру загружаются фотки с сайта нашего, но они большиватые для 1С (много места занимают), делать скриптом автоизменение размеров картинки и складывание в отдельную папку не очень удобно и пр, а так-бы можно было сделать вызов автоизменения размера при загрузке в базу при помощи вашей проги или аналогов.
14. maxpiter 150 21.07.10 12:33 Сейчас в теме
(12) по хорошему, нужно из exe сделать dll и тогда с ней будет намного приятнее работать.
Постараюсь сделать из нее библиотеку и более правильный код.
16. markers 279 21.07.10 13:10 Сейчас в теме
К примеру ЗапуститьПриложение() КомандыСистемы() не реализованы под сервером 1С
24. пользователь 21.07.10 14:50
Сообщение было скрыто модератором.
...
26. maxpiter 150 21.07.10 15:10 Сейчас в теме
а еще лучше вот так, чтобы не завешивать сервер :)


Перем Процесс;

Процедура Сформировать()
exe = СоздатьОбъект("WScript.Shell");
Процесс = exe.Exec("calc.exe");
КонецПроцедуры

Процедура Проверка()
Если Процесс.Status =0 Тогда
Сообщить("Работает");
Иначе
Сообщить("Отработал");
КонецЕсли;
КонецПроцедуры
27. markers 279 26.07.10 10:51 Сейчас в теме
(25, 26) Спасибо за варианты, правда "Перем Процесс;" нельзя использовать в общем модуле, тока в обработках и т.д. Но всё-равно спасибо!
28. maxpiter 150 26.07.10 11:07 Сейчас в теме
(27) ну я же как примеры только, да и на 7ке :)
29. Abadonna 3977 11.08.10 05:48 Сейчас в теме
(0)
если кто-то сделает из нее dll, чтобы она в 1С цеплялась

Присобачил к http://infostart.ru/public/59436/#postform (пост 197)
Изменение размеров в соответствии с выбранным масштабом и изменение качества сжатия
(CompressionQuality)
Ты бы, кстати, у себя тоже приделал:
jpg.CompressionQuality := Q;// от 1 до 100
  jpg.DIBNeeded;
  jpg.Compress;
  jpg.SaveToFile(ВыходнойФайл);

P.S. И, имхо, лучше не задавать отдельно Ширину и Высоту (а то накосячат непропорциональных), а просто масштаб числом
30. maxpiter 150 11.08.10 09:53 Сейчас в теме
(29) здорово
>> P.S. И, имхо, лучше не задавать отдельно Ширину и Высоту (а то накосячат непропорциональных), а просто масштаб числом

при изменении размеров, проверяю, какая сторона больше, то значение и использую, так что, не накосячат :)
31. Abadonna 3977 11.08.10 09:55 Сейчас в теме
(30) Зато с масштабом один параметр убирается, что тоже неплохо ;)
32. maxpiter 150 19.08.10 13:26 Сейчас в теме
Сделал таки DLLку :)
Поручик; Abadonna; +2 Ответить
33. gerasan 23.09.10 12:11 Сейчас в теме
Почему-то DLL-ка в 8-ке выдает сообщение:ImgResize : Access violation at address 0A6333A2 in module 'ImgResize.dll'. Read of address 00000001.
34. maxpiter 150 23.09.10 12:26 Сейчас в теме
(33) Вы все флаги передаете?
Я не делал проверку на неверно переданные параметры.
Скорее всего проблема в этом.
35. gerasan 23.09.10 13:11 Сейчас в теме
Спасибо! Получилось!

Код в итоге такой:
ПутьКФайлам = "D:\111\111\333\";

Картинка = "big.JPG";
НоваяКартинка = "sm.jpg";

ВодянойЗнак = "watermark.png";

ВысотаК = 400;
ШиринаК = 275;

ЗагрузитьВнешнююКомпоненту(ПутьКФайлам + "\"+"ImgResize.dll");

ИМЖ = Новый ("AddIn.ImgResize");
ф1 = ПутьКФайлам + "\" + Картинка;
ф2 = ПутьКФайлам + "\" + НоваяКартинка;
ф3 = ПутьКФайлам + "\" + ВодянойЗнак;
ИМЖ.ПережатьФайл(ф1, ф2, ВысотаК, ШиринаК, ф3);

Проблема была в том, что имя файла водяного знака было с пробелом: ВодянойЗнак = "watermark.png ";
36. anc2002 20.01.12 06:26 Сейчас в теме
Программа взята за основу в обработке картинок на живой базе, помогает при загрузке изображений в базу данных, автору респект
37. maxpiter 150 20.01.12 09:23 Сейчас в теме
(36) и вам спасибо за отзыв :)
38. osavv 08.02.12 15:03 Сейчас в теме
(37) скажите пожалуйста, в какое место картинки вы ставите водный знак?
39. maxpiter 150 08.02.12 15:50 Сейчас в теме
40. osavv 09.02.12 06:17 Сейчас в теме
(39) а как сделать так, чтобы водный знак располагался в правом нижнем углу
41. maxpiter 150 09.02.12 09:31 Сейчас в теме
(40) в данной скомпилированной версии никак.
Исходники на Delphi 7 прилагаются. Там есть закоментированный кусок по установке координат, посмотрите, может получится.
42. osavv 09.02.12 10:12 Сейчас в теме
в каком файле исходники? может в файле JPGResize.zip?
просто при попытке скачать JPGResize.zip - скачивается почему-то ImgResize.zip, в котором лежит библиотека
43. maxpiter 150 09.02.12 11:15 Сейчас в теме
(42) перезалил исходники на dll, странно что они подменились на другой файл. 19.07.10 судя по комментам там все таки исходники были :)
44. pumbaE 09.02.12 11:30 Сейчас в теме
Извините, но правда дороже.
http://www.imagemagick.org/script/ImageMagickObject.php мощный функционал, делай с картинками что хочешь и как хочешь. Также спокойно подключается к 1C.

Труд, то хороший, но при выборе между вашим вариантом с исходниками, с определенным функционалом и imagemagick тоже с исходниками и с еще большим функционалом я бы выбрал imagemagick.

P.s.: не качал но осуждаю :). Извините если, что за резкий тон.
46. maxpiter 150 09.02.12 12:20 Сейчас в теме
(44) вот если бы, вы эту ссылку дали в июле 2010 года, то ничего бы этого не было, потому как никто до вашего коммента, ранее не давал эту ссылку.
также функционал этой публикации использован здесь http://infostart.ru/public/59436/
так что у каждого своя правда :)
осуждения здесь выражаются минусами :)

спасибо за ссылку.
45. osavv 09.02.12 11:54 Сейчас в теме
огромное спасибо!!!
скачалось, буду разбираться
47. pumbaE 09.02.12 13:28 Сейчас в теме
Не посмотрел "дата начала публикации", по правде сказать в 2010 году imagemagick для работы com требовал ручной сборки и только в 2011 они сделали инсталятор...
48. Dima_Mazhor 98 06.06.12 12:54 Сейчас в теме
Потратил последний рубль на скачку exe файла, а надо было ддлку блин)) Сейчас мучаюсь, подскажите пожалуйста допустим батник с таким содержанием JPGResize.exe "1.jpg" "2.jpg" 100 100 "ttt.png" ошибок не выскакивает файл запускается но ничего не делается.
53. maxpiter 150 14.01.13 10:35 Сейчас в теме
(48) попробуйте указать полные пути к файлам. Если конечно еще актуально :)
49. MartyNSK 1 12.01.13 17:56 Сейчас в теме
+, еще бы прозрачность водяного знака добавить)
50. maxpiter 150 12.01.13 18:22 Сейчас в теме
(49) Прозрачность регулируете с помощью файла png :)
51. MartyNSK 1 13.01.13 18:18 Сейчас в теме
(50)=) Это ясно, однако центровка странная, я прозрачность сделал у пнг файла, фона нет, исходное изображение 1024х768, водяной знак тоже 1024х768(нет фона, прозрачность 20), встала на центр левым верхним краем, во вложении тот же логотип, но размер 200х300.
Прикрепленные файлы:
52. maxpiter 150 14.01.13 10:33 Сейчас в теме
(51) файл png не нужно делать размером с исходную картинку.
Я как-то даже не предполагал что такое кто-то будет делать :)
Обычно файл watermark имеет минимально необходимый размер, так как его можно располагать не только по центру но и скажем по синусоиде :) или рандомно по области картинки.
54. 7OH 70 28.09.16 12:41 Сейчас в теме
А без файлов можно сделать ?
Чтобы на клиенте при выводе фоток из базы добавлять watermark.
55. maxpiter 150 04.10.16 21:32 Сейчас в теме
(54) 7OH, добрый день.
В каждом случае это очень индивидуально. В какое ПО вы подключаете dll, каким образом выдаются картинки...
Исходники во вложении. Доработкой этой dll заниматься не планирую.
56. rif-nrr 16 24.09.20 21:27 Сейчас в теме
(55) центровка реально невозможная, расположить в центре водяной знак не получилось... Очень похоже на некую зависимость размеров изображения, размеров знака и размеров выходного файла, но как это работает - непонятно
57. maxpiter 150 05.10.20 10:56 Сейчас в теме
(56) watermark должен быть минимально необходимого размера (скажем 200px*100px)
Картинка к примеру 1024px * 768px

тогда watermark будет расположен 1024/2 - 200/2 по горизонтали и 768/2 - 100/2 по вертикали.

//в центре
            2: begin
              xPNG:=StrToInt(FloatToStrF(newWidth/2-IMGn.Width/2,ffFixed,5,0));
              yPNG:=StrToInt(FloatToStrF(newHeight/2-IMGn.Height/2,ffFixed,5,0));
              bmp.Canvas.Draw(xPNG,yPNG,IMGn.Picture.Graphic);
            end;
Для отправки сообщения требуется регистрация/авторизация