Важная информация
Показано с 1 по 9 из 9

Тема: Создание водяного знака на изображении программно

  1. #1 Создание водяного знака на изображении программно 
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Программно создадим водяной знак на фото.
    Для этого будем использовать библиотеку window9
    Скачать ее можно [Ссылки могут видеть только зарегистрированные пользователи. ]
    Скомпилировать как консольное приложение. Картинку передавать программе в командной строке.

    Код :
    #Include "window9.bi" ' подключаем библиотеку
     
    Using GDIPLUS ' открываем пространство имен GDI+
    Dim As String sNameImage = Command(1) ' получаем имя рисунка с полным путем к нему
    Dim As PVOID image =  Load_imageA(sNameImage) ' загружаем фото
     
    If image<>0 Then
    	Dim As PVOID font=CreateFontDrawA("Courier",22,2,3) ' загружаем шрифт
    	Dim As PVOID brush = CreateBrushA(1,1,15,15,&hfF0000FF,&hff0FF000)' загружаем кисть
    	Dim As Integer w = Image_WidthA(image),h = Image_HeightA(image) ' узнаем размеры фото
    	ImageStartDrawA(image) 'начинаем рисовать на фото
    	TextDrawA("www.блабла.com",w-280,h-30,font,0,brush,TextRenderingHintAntiAlias) ' рисуем текст	
    	StopDrawA ' заканчиваем рисовать
    	InsertString(sNameImage , "_" , Len(sNameImage)-3)'создаем имя для нового фото 
    	SAVE_imageA(image,sNameImage) ' сохраняем фото
    	FreeGpBitmap(image) ' освобождаем хендл изображения
    	FreeFontDrawA(font) ' освобождаем хендл шрифта
    	FreeBrushA(brush)' освобождаем хендл кисти
    EndIf

    Об исходнике:

    Using GDIPLUS ' открываем пространство имен GDI+
    Пространство имен GDI+ нужно только для определения констант FontStyleItalic,TextRenderingHintAntiAlias
    Если вместо этих констант использовать соответствующие им значения (2 и 4), то эту строку можно не писать.

    Dim As String sNameImage = Command(1) ' имя рисунка
    Здесь мы получаем путь к рисунку. Он передается через командную строку и сохраняется в переменной sNameImage

    Dim As PVOID image = Load_imageA(sNameImage) ' загружаем фото
    Далее загружаем фото. Для того чтобы можно было обращаться к этому фото другими функциями сохраним хендл, который возвращает функция Load_ImageA

    Dim As PVOID font=CreateFontDrawA("Courier",22,2,3) ' загружаем шрифт
    Dim As PVOID brush = CreateBrushA(1,1,15,15,&hfF0000FF,&hff0FF000)' загружаем кисть
    Здесь мы создаем новый шрифт и кисть для рисования и сохраняем их хендлы для дальнейшего использования в функции TextDrawA. Шрифт получится наклонный. Кисть градиентная (сине-зеленая). Из-за этого получится своеобразное чередование цвета в тексте.
    В реале можно было не содавать кисть и шрифт , а использовать значения функции TextDrawA по умолчанию. Просто захотелось создать не однотонный водяной знак.

    Dim As Integer w = Image_WidthA(image),h = Image_HeightA(image) ' узнаем размеры фото
    Здесь узнаем размеры фото для определения места рисования текста

    ImageStartDrawA(image) 'начинаем рисовать на фото
    ....
    StopDrawA
    функции образуют блок , в котором можно производить рисование

    TextDrawA("www.блабла.com",w-280,h-30,font,0,brush,TextRenderingHintAntiAlias) ' рисуем текст
    Рисуется текст с нужным нам шрифтом , кистью и с режимом сглаживания текста.

    InsertString(sNameImage , "_" , Len(sNameImage)-3)'создаем имя для нового фото
    Путь к нашей картинке меняем, для того чтобы создать новое фото, оставляя оригинал. Функция InsertString вставляем любой текст в любое место строки. У нас дополнительно у имени файла появится символ подчеркивания

    SAVE_imageA(image,sNameImage) ' сохраняем фото
    Сохраняем фото с новым именем

    FreeGpBitmap(image) ' освобождаем хендл изображения
    FreeFontDrawA(font) ' освобождаем хендл шрифта
    FreeBrushA(brush)' освобождаем хендл кисти
    Освобождаем все ранее созданные хендлы. Получится примерно так:

    [Ссылки могут видеть только зарегистрированные пользователи. ]

    На основе этого кода можно создать программу, которая будет накладывать фото в пакетном режиме.
    Вообще проявив фантазию и используя другие возможности графики , которые имеются в библиотеке, можно сделать многое. Удачи!
    Ответить с цитированием  
     

  2. Пользователь сказал cпасибо:

    >Quiet Snow< (14.01.2013)

  3. #2  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    Как понимаю легко подредактировать для пакетной обработки. Хороший код.

    А какие форматы поддерживаются? PNG у меня работает, JPG - нет(т.е. сохраняет без вотермарка).
    Библиотеку я скачал, в директорию закинул libwindow9.a и Window9.bi.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  4. #3  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    А какие форматы поддерживаются? PNG у меня работает, JPG - нет(т.е. сохраняет без вотермарка).
    Библиотека поддерживает форматы: Jpeg, Png, Gif, Bmp, Ico, Tiff. Однако данный код работает с фотками имеющими расширение из трех буковок (PNG, JPG, BMP). Ты скорее всего пробовал JPEG. Для того, чтобы код работал и с форматами JPEG, TIFF, надо изменить чуточку код. Принцип:

    при трех буквах в строке с InsertString получается результат: foto_.jpg
    при четырех буквах foto_jpeg

    Я думаю разобраться не сложно и изменить код тоже.
    Ответить с цитированием  
     

  5. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    stabud, расширение файла - JPG. Прикол ещё в том, что на одном JPG файле - работает, на другом - нет.
    Этот злощастный файл прикрепил в архивчике - смотрите и тестируйте.
    Вложения
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  6. #5  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Да , надо смотреть либу, где-то наверно косяк, может даже не мой , а GDI+
    Ответить с цитированием  
     

  7. #6  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Открыл я твое фото в GIMP. В итоге:

    [Ссылки могут видеть только зарегистрированные пользователи. ]

    Че за хрень, кто знает? Обычные фото такого не выдают.

    В любом случае нет рисования текста, поскольку для шрифта я использовал единицы измерения UnitPoint. Для обычных изображений проблем нет, но у тебя хитрое фото . И видать координаты далеко вылезли за рамки фото. Для того чтобы текст рисовался на твоем фото, надо поменять единицы измерения на пиксели:

    Код :
    Dim As PVOID font=CreateFontDrawA("Courier",22,2,UnitPixel)

    Тогда проблем не будет.
    Ответить с цитированием  
     

  8. Пользователь сказал cпасибо:

    >Quiet Snow< (15.01.2013)

  9. #7  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    Че за хрень, кто знает? Обычные фото такого не выдают.
    Видимо таблицы преобразования цветового пространства. Не суть, если формат изображения
    это позволяет.

    Не знаю чем хитро фото, я его нашёл в интернете, когда свою аватарку делал.
    Цветовые профили используются для синхронизации отображения на разных дисплеях, т.е.
    если профиль не соответствует тому, что на компе - происходит преобразование цветов,
    согласно разнице между профилями.

    надо поменять единицы измерения на пиксели
    А с другими изображениями работает это значение? Если да, то можно оставлять и не думать.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  10. #8  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    А с другими изображениями работает это значение? Если да, то можно оставлять и не думать.
    У меня работает.
    Ответить с цитированием  
     

  11. #9  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    Да теперь всё работает, проверил. Ну что ж, спасибо за такой классный пример.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Создание баннеров | Изготовление тизеров | Веб-дизайн
    от Nucho в разделе Изготовление сайтов и дизайн
    Ответов: 0
    Последнее сообщение: 14.09.2012, 16:03
  2. Создание com/exe файла
    от Роман в разделе Assembler
    Ответов: 25
    Последнее сообщение: 26.07.2012, 18:01
  3. Ответов: 12
    Последнее сообщение: 18.11.2011, 15:22
  4. Создание и продвижение сайтов, их развитие.
    от maxim_office в разделе Изготовление сайтов и дизайн
    Ответов: 0
    Последнее сообщение: 04.05.2011, 00:27
  5. Ответов: 12
    Последнее сообщение: 28.01.2011, 01:33
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •