Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Наложение водяного знака на изображение

Ответить
Настройки темы
[решено] Наложение водяного знака на изображение

Аватара для centaurvv

Новый участник


Сообщения: 24
Благодарности: 3

Профиль | Отправить PM | Цитировать


Есть пачка изображений в формате *.jpg.

Задача состоит в том, чтобы наложить на каждое изображение дату его создания (т.е. в данном случае текст, не картинку).

Как можно это реализовать средствами Autoit без использования сторонних программ?

Если с jpg проблемно, пусть это будут другие форматы... png, bmp и тп.

Отправлено: 22:43, 10-03-2011

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
#include <File.au3>
#include <GDIPlus.au3>

$iMake_Backup = 0
$sImages_Path = @ScriptDir & "\Images"

$aFiles = _FileListToArray($sImages_Path, "*.jpg", 1)

For $i = 1 To UBound($aFiles)-1
    $sImage = $sImages_Path & "\" & $aFiles[$i]
    $sFileTime = StringRegExpReplace(FileGetTime($sImage, 1, 1), "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$3/$2/$1, $4:$5:$6")

    If $iMake_Backup Then
        FileCopy($sImage, $sImage & ".bak", 1)
    EndIf

    _ImageSetWaterMark($sImage, -1, $sFileTime, 0xFF0000, 16, -1, -1, 4)
Next

Func _ImageSetWaterMark($sSrcImage, $sDstImage, $sWaterMark, $iColor=0xFF0000, $iFontSize=16, $iLeft=0, $iTop=0, $iFormat=4)
    ; Initialize GDI+ library
    _GDIPlus_StartUp()

    Local $hImage     = _GDIPlus_ImageLoadFromFile($sSrcImage)

    Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
    Local $hFamily     = _GDIPlus_FontFamilyCreate("Arial")
    Local $hFont    = _GDIPlus_FontCreate($hFamily, $iFontSize, 1)
    Local $tLayout  = _GDIPlus_RectFCreate(0, 0)
    Local $hFormat  = _GDIPlus_StringFormatCreate($iFormat)
    Local $hBrush1  = _GDIPlus_BrushCreateSolid(0xA2FFFFFF)
    Local $hBrush2  = _GDIPlus_BrushCreateSolid("0xC4" & Hex(Number($iColor), 6))
    Local $hPen     = _GDIPlus_PenCreate(0xC4000000, 2)
    Local $aInfo    = _GDIPlus_GraphicsMeasureString($hGraphic, $sWaterMark, $hFont, $tLayout, $hFormat)

    Local $iWidth   = DllStructGetData($aInfo[0], "Width")
    Local $iHeight  = DllStructGetData($aInfo[0], "Height")

    If $iLeft = -1 Then $iLeft = _GDIPlus_ImageGetWidth($hImage) - $iWidth
    If $iTop = -1 Then $iTop = _GDIPlus_ImageGetHeight($hImage) - $iHeight

    If $iLeft = 0 Then $iLeft = 1
    If $iTop = 0 Then $iTop = 1

    DllStructSetData($aInfo[0], "X", $iLeft)
    DllStructSetData($aInfo[0], "Y", $iTop)

    _GDIPlus_GraphicsFillRect($hGraphic, $iLeft, $iTop, $iWidth, $iHeight, $hBrush1)
    _GDIPlus_GraphicsDrawRect($hGraphic, $iLeft, $iTop, $iWidth, $iHeight, $hPen)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, $sWaterMark, $hFont, $aInfo[0], $hFormat, $hBrush2)

    ; Save image
    Local $sTmp_ImageFile = StringRegExpReplace($sSrcImage, "(.*)(\.[^\.]*$)", "\1_tmp\2")
    _GDIPlus_ImageSaveToFile($hImage, $sTmp_ImageFile)

    ; Free resources
    _GDIPlus_PenDispose         ($hPen    )
    _GDIPlus_BrushDispose       ($hBrush1 )
    _GDIPlus_BrushDispose       ($hBrush2 )
    _GDIPlus_StringFormatDispose($hFormat )
    _GDIPlus_FontDispose        ($hFont   )
    _GDIPlus_FontFamilyDispose  ($hFamily )
    _GDIPlus_GraphicsDispose    ($hGraphic)
    _GDIPlus_ImageDispose       ($hImage  )

    _GDIPlus_ShutDown()

    If $sDstImage <> $sSrcImage And FileExists($sDstImage) Then
        FileMove($sTmp_ImageFile, $sDstImage, 1)
    ElseIf $sDstImage = -1 Or $sDstImage = $sSrcImage Or Not FileExists($sDstImage) Then
        FileMove($sTmp_ImageFile, $sSrcImage, 1)
    EndIf

    FileDelete($sTmp_ImageFile)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:45, 11-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для centaurvv

Новый участник


Сообщения: 24
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
“Сделай так просто, как возможно, но не проще этого.”
Браво, Маэстро!
В очередной раз преклоняюсь пред Вашим мастерством!

Отправлено: 02:06, 11-03-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Наложение водяного знака на изображение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
наложение текста на видео shmond Видео и аудио: обработка и кодирование 17 22-04-2012 21:35
VBS/WSH/JS - [решено] как к примеру получить только первые 4 знака переменной ? mitiya Скриптовые языки администрирования Windows 3 05-01-2011 14:21
Система водяного охлаждения или суперкулер? Yuron_477 Разгон, охлаждение и моддинг 4 22-06-2010 19:47
Выбор системы водяного охлаждения Nahim Разгон, охлаждение и моддинг 12 29-06-2007 21:45
Наложение DACL на floppy usverrr Программирование и базы данных 2 19-08-2002 07:16




 
Переход