Что нового

Как добавить логотип на фотографию?

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Господа! Есть ли такая функция, которая добавляет в качестве логотипа одно изображение к другому?
Да вообще какие есть средства работы с графикой?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Наложить одно изображение на другое, это очень простая задача в несколько строк кода. Все это реализуется с помощью GDI+.

Код:
#Include <GDIPlus.au3>

_GDIPlus_Startup ()
$hImage = _GDIPlus_ImageLoadFromFile('Image.bmp')
$hLogo = _GDIPlus_ImageLoadFromFile('Logo.png')
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
_GDIPlus_GraphicsDrawImage($hGraphic, $hLogo, 10, 10)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageSaveToFile ($hImage, 'NewImage.bmp')
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ImageDispose($hLogo)
_GDIPlus_ShutDown()
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Радость оказалась несколько преждевременной. Вот еще вопрос: есть там функция, которая прозрачность устанавливает?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Постараюсь продлить твою радость, но исходный код будет очень страшный... :sick: Расширение для GDI+ можешь скачать у нас на форуме.

Код:
#Include <GDIP.au3>

$sImage = @ScriptDir & '\Image.jpg'
$sLogo = @ScriptDir & '\Logo.png'
$sResult = @ScriptDir & '\ImageAndLogo.jpg'

$iAlpha = 127
$iX = 40
$iY = 40

_GDIPlus_Startup ()
$hImage = _GDIPlus_ImageLoadFromFile($sImage)
$hLogo = _GDIPlus_ImageLoadFromFile($sLogo)
$hIA = _GDIPlus_ImageAttributesCreate()
$tCM = _GDIPlus_ColorMatrixCreateScale(1, 1, 1, $iAlpha / 255)
_GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, 1, DllStructGetPtr($tCM))
$aSize = _GDIPlus_ImageGetDimension($hLogo)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
_GDIPlus_GraphicsDrawImageRectRectIA($hGraphic, $hLogo, 0, 0, $aSize[0], $aSize[1], $iX, $iY, $aSize[0], $aSize[1], $hIA)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageAttributesDispose($hIA)
_GDIPlus_ImageSaveToFile ($hImage, $sResult)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ImageDispose($hLogo)
_GDIPlus_ShutDown()


 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Я тут обнаружил библиотеку
http://linux-admin.net.ru/content/436

Там вот что:
Какая команда сделает это?
Combine может быть использована для компоновки двух изображений в одно. У этой утилиты есть несколько опций, которые определяют как именно компоновать изображения:

combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpg

Опция "gravity SouthEast" помещает logo.gif в нижний правый угол. "compose Over" означает, что мы заменяем изображение логотипом в тех местах где они перекрываются.
Теперь осталось только udf написать...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
А зачем? Все это можно сделать с помощью GDI+ или FreeImage.
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Yashied сказал(а):
А зачем? Все это можно сделать с помощью GDI+ или FreeImage.
По чести сказать по freeimage документация ну никакая. Там какие-то дикие примеры на c++, что касается GDI+, так там слишком все на элементарные операции раскладывает а тут все заточено непосредственно под обработку изображений. Удобнее ИМХО.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
По чести сказать по freeimage документация ну никакая. Там какие-то дикие примеры на c++, что касается GDI+, так там слишком все на элементарные операции раскладывает а тут все заточено непосредственно под обработку изображений. Удобнее ИМХО.
Не путай редактор с интерфейсом командной строки и библиотеку.
Как и было написано тут - документация сложна для понимания, добавлю от себя, для непрограммистов. 119 страниц четко структурированного описания без воды.
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
axlwor сказал(а):
По чести сказать по freeimage документация ну никакая. Там какие-то дикие примеры на c++, что касается GDI+, так там слишком все на элементарные операции раскладывает а тут все заточено непосредственно под обработку изображений. Удобнее ИМХО.
Не путай редактор с интерфейсом командной строки и библиотеку.
Как и было написано тут - документация сложна для понимания, добавлю от себя, для непрограммистов. 119 страниц четко структурированного описания без воды.
Вот-вот... Именно для непрограммистов. Там решение задачи добавления логотипа происходит путем совокупности функций, которые даже приближенно о логотипе не говорят. Что проще - написать одну сроку с параметрами в командной строке,или старательно выбирать функции из библиотеки? Подчеркиваю, для решения задачи автоматизации типичных задач обработки фотографий, второй путь предпочтительней. Однако есть целый класс задач, которые решить именно с помощью командной строки не удастся...
 

axlwor

Скриптер
Сообщения
657
Репутация
147
для таких задач autoit уже не нужен. по твоей ссылке уже есть пример на sh. Аналогичный можно сделать на cmd
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
axlwor сказал(а):
для таких задач autoit уже не нужен. по твоей ссылке уже есть пример на sh. Аналогичный можно сделать на cmd
Теоретически - да, а вот практически... Autoit, вообще как скрипач, никому не нужен. Все можно сделать на ассемблере. :laugh: Шутка. Просто в AutoIt много ГОТОВЫХ инструментов.

Если говорить о мой задаче, то вот хочу я автоматом помещать картинки на несколько web ресурсов со своим логотипом.
На
rambler.ru
mail.ru
Vkontakte.ru
odnoklassniki.ru

Соответственно получаем несколько задач:

1. Подготовка картинок (обрезка, конвертация в меньший размер, для быстроты закачки)
2. Вставка логотипа, с подгонкой его по размерам и положением в зависимости от сайта (на одноклассниках, свой логотип на в нижнем правом углу).
3. Авторизация на сайте.
4. Закачка изображения.
5. Примитивный визуальный интерфейс.

И что каждую на отдельном языке решать? Теоретически - можно, но при наличии большого количества ГОТОВЫХ решений, при нетребовательности к ресурсам (время закачки, маленький канал Интернета) Autoit - самой то.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
вот обработку файлов я бы в командной строке бы и провел.
что то похожее на
forfiles...
convert...
rename...
закачку через curl
хотя каждый решает свои задачи как хочет
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
axlwor сказал(а):
вот обработку файлов я бы в командной строке бы и провел.
что то похожее на
forfiles...
convert...
rename...
закачку через curl
хотя каждый решает свои задачи как хочет
И интерфейс визуальный... :ok:
Авторизацию тоже в командной строке...
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Что нужно от интерфейса? кнопка старт? хранение логинов/паролей?
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
axlwor сказал(а):
Что нужно от интерфейса? кнопка старт? хранение логинов/паролей?
1. Хранение шаблонов на рассылку
2. Возможность их создания
3. Возможность контроля выполнения процесса.
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
http://www.imagemagick.org/discourse-server/viewtopic.php?f=8&t=9930#p30954
Код:
FileInstall("ImageMagickObject.dll",@SystemDir&"\ImageMagickObject.dll",0)
RunWait(@ComSpec & " /c regsvr32 /s ImageMagickObject.dll",@SystemDir,@SW_HIDE)

$oIM=ObjCreate("ImageMagickObject.MagickImage")
$oIM.Convert("sample.jpg", "-resize","150x150", "-sepia-tone","80%", "sampleThumb.jpg")

С сайта imagemagick, как использовать библиотеку, без использования командной строки.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Хе, тогда я голосую за Adobe Photoshop.

File - Automate - Batch...
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Yashied сказал(а):
Хе, тогда я голосую за Adobe Photoshop.

File - Automate - Batch...
Хорошо, что не за "Единую Россию" :shok:
А зачем batch?
Код:
WinWait("Photoshop")

...и понеслась!!! :laugh:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Нет, создаю Action, и понеслась! AutoIt здесь вообще не нужен.
 
Верх