|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Наложение водяного знака на изображение |
|
[решено] Наложение водяного знака на изображение
|
Новый участник Сообщения: 24 |
Есть пачка изображений в формате *.jpg.
Задача состоит в том, чтобы наложить на каждое изображение дату его создания (т.е. в данном случае текст, не картинку). Как можно это реализовать средствами Autoit без использования сторонних программ? Если с jpg проблемно, пусть это будут другие форматы... png, bmp и тп. |
|
Отправлено: 22:43, 10-03-2011 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
------- Отправлено: 00:45, 11-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
В очередной раз преклоняюсь пред Вашим мастерством! |
|
Отправлено: 02:06, 11-03-2011 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
наложение текста на видео | 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 |
|