Что нового

GDI+ текст на картинке

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Доброго времени суток.

Пытаюсь сделать функцию которая бы писала текст на картинках.
Одна беда, в GDI+ я хронически не врубаюсь.

Короче методом антинаучного тыка написал следующее:
Код:
#Include <GDIPlus.au3>

$sText = 'Text'

$iLeft = 5
$iTop = 5

$xColor = 0xFFFFD823
$iFontSize = 24
$iFontStyle = 0

_GDIPlus_Startup()
$hFamily = _GDIPlus_FontFamilyCreate('Arial')
$hFont   = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontStyle)
$hFormat = _GDIPlus_StringFormatCreate()


$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\base.jpg')
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
$tLayout  = _GDIPlus_RectFCreate($iLeft, $iTop)
$hBrush  = _GDIPlus_BrushCreateSolid($xColor)
$aInfo    = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)

_GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_ImageSaveToFileEx($hImage, @ScriptDir & '\new.jpg', _GDIPlus_EncodersGetCLSID ('JPG'))
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage  )

_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_Shutdown()

Вроде работает. Но хотелось бы чтобы текст был по середине.
Может кто нибудь ещё проверит скрипт на грамотность (не нужные функции, лучшие решения итд.)?

Зы
Желательно что бы текст можно было сдвинуть относительно центра.
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
dwerf
Сам конечно разбираюсь не очень, но попробуй с использованием
_GDIPlus_ImageGetHeight и _GDIPlus_ImageGetWidth

Код:
#Include <GDIPlus.au3>

$sText = 'Text'

$xColor = 0xFFFFD823
$iFontSize = 24
$iFontStyle = 0

_GDIPlus_Startup()
$hFamily = _GDIPlus_FontFamilyCreate('Arial')
$hFont   = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontStyle)
$hFormat = _GDIPlus_StringFormatCreate()


$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Безымянный.jpg')

$iLeft = _GDIPlus_ImageGetWidth($hImage)/2
$iTop = _GDIPlus_ImageGetHeight($hImage)/2

$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
$tLayout  = _GDIPlus_RectFCreate($iLeft, $iTop)
$hBrush  = _GDIPlus_BrushCreateSolid($xColor)
$aInfo    = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)

_GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_ImageSaveToFileEx($hImage, @ScriptDir & '\Безымянный2.jpg', _GDIPlus_EncodersGetCLSID ('JPG'))
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage  )

_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_Shutdown()

Только для полной оцентровки нужно знать высоту и длинну текста :smile:
 
Автор
D

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
SECTOR сказал(а):
Только для полной оцентровки нужно знать высоту и длинну текста :smile:
Угу, в этом вся проблема. Я кажется даже нашёл, откуда её достать. Сейчас попробую, отпишусь.


Добавлено:
Сообщение автоматически объединено:

Примерно так:
Код:
#Include <GDIPlus.au3>

$sText = 'Text'

$xColor = 0xFFFFD823
$iFontSize = 24
$iFontStyle = 0

_GDIPlus_Startup()
$hFamily = _GDIPlus_FontFamilyCreate('Arial')
$hFont   = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontStyle)
$hFormat = _GDIPlus_StringFormatCreate()
$hBrush  = _GDIPlus_BrushCreateSolid($xColor)

$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\base.jpg')
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)

$iLeft = _GDIPlus_ImageGetWidth($hImage)/2
$iTop = _GDIPlus_ImageGetHeight($hImage)/2

$tLayout  = _GDIPlus_RectFCreate()
$aInfo    = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)

DllStructSetData($aInfo[0], 1, (_GDIPlus_ImageGetWidth($hImage)-DllStructGetData($aInfo[0], 3))/2)
DllStructSetData($aInfo[0], 2, (_GDIPlus_ImageGetHeight($hImage)-DllStructGetData($aInfo[0], 4))/2)

_GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_ImageSaveToFileEx($hImage, @ScriptDir & '\new.jpg', _GDIPlus_EncodersGetCLSID ('JPG'))
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage  )

_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_Shutdown()
 
Верх