仙乃日 发表于 2014-7-25 20:01:38

[已解决]如何让生成的字符保持在背景图片的中央?

本帖最后由 仙乃日 于 2014-7-28 16:15 编辑

#region ACN预处理程序参数(常用参数)
#PRE_Icon=                                                                                 ;图标,支持EXE,DLL,ICO
#PRE_OutFile=                                                                        ;输出文件名
#PRE_OutFile_Type=exe                                                        ;文件类型
#PRE_Compression=4                                                                ;压缩等级
#PRE_UseUpx=y                                                                         ;使用压缩
#PRE_Res_Comment=                                                                 ;程序注释
#PRE_Res_Description=                                                        ;详细信息
#PRE_Res_Fileversion=                                                        ;文件版本
#PRE_Res_FileVersion_AutoIncrement=p                        ;自动更新版本
#PRE_Res_LegalCopyright=                                                 ;版权
#PRE_Change2CUI=N                                           ;修改输出的程序为CUI(控制台程序)
;#PRE_Res_Field=AutoIt Version|%AutoItVer%                ;自定义资源段
;#PRE_Run_Tidy=                                                   ;脚本整理
;#PRE_Run_Obfuscator=                                                      ;代码迷惑
;#PRE_Run_AU3Check=                                                         ;语法检查
;#PRE_Run_Before=                                                                 ;运行前
;#PRE_Run_After=                                                                ;运行后
;#PRE_UseX64=n                                                                        ;使用64位解释器
;#PRE_Compile_Both                                                                ;进行双平台编译
#endregion ACN预处理程序参数(常用参数)
#cs ____________________________________
       
        Au3 版本:
        脚本作者:
        电子邮件:
        QQ/TM:
        脚本版本:
        脚本功能:
       
#ce _______________脚本开始_________________


#include<inet.au3>
#include <GDIPlus.au3>
Dim $var = 'abcdekmnpqstuvwxyzABCDEFJKLMNPQRSTUVWXYZ23456789'
For $i = 1 To StringLen($var)
;~         MsgBox(0, "", StringMid($var, $i, 1))
        Dim $str = StringMid($var, $i, 1)
        For $y = -40 To 40 Step 2
                shuiyin(@ScriptDir & "\100.bmp", @ScriptDir & "\A\" & $i & $y & $str & ".bmp", $str, $y, "Arial", 28, "正常", 30, 50, 0xFF000000, "", "", "")
        Next
Next



;~ shuiyin(@ScriptDir & "\01.jpg", @ScriptDir & "\02.jpg", $f, "", "", "", "", "", "", @TempDir & "\gto250pic.gif", 10, 100)
;========================================================================================
;纯au3编写的图片添加文字水印的UDF___________gto250 2010.4.5
;参数:
;      $nAngle:旋转角度
;      $pic:需要添加水印的图片的路径
;            eq:@ScriptDir & "\1.jpg"
;      $savepic:水印添加后保存的路径
;            eq:@ScriptDir & "\1.jpg"
;      $str:添加的水印文字内容
;            eq:"纯au3文字水印"
;      $font:字体
;            eq:"宋体"
;      $size:字体大小   ;已经更改为按像素来计算
;            eq:12
;      $style:字体类型
;            eq:正常、粗体、斜体、下划线、删除线
;      $right:文字距离图片右边距
;            eq:0
;      $top:文字距离图片上边距
;            eq:0
;      $color:字体颜色
;            eq:0xff0000ff
;      $shuiyinpic:水印图片路径
;            eq:@ScriptDir & "\1.jpg"
;      $picx:水印图片放置的位置
;      $picy=水印图片放置的位置
;      eq:shuiyin(@ScriptDir&"\01.jpg",@ScriptDir&"\02.jpg",$f,"","","","","","",@TempDir & "\gto250pic.gif",10,100);#000000
;=========================================================================================
Func shuiyin($pic, $savepic, $str, $nAngle, $font = "宋体", $size = "25", $style = "正常", $right = 15, $top = 5, $color = 0xFF000000, $shuiyinpic = "", $picx = "", $picy = "")
        If $str = "" Then
                $str = "没有填写任何东西"
        EndIf
        If $font = "" Then
                $font = "宋体"
        EndIf
        If $size = "" Then
                $size = 12
        EndIf
        If $style = "" Then
                $style = "正常"
        EndIf
        If $right = "" Then
                $right = 0
        EndIf
        If $top = "" Then
                $top = 0
        EndIf
        If $color = "" Then
                $color = 0xff0000ff
        EndIf
       
       
       
       
        Switch $style
                Case "正常"
                        $mystyle = 0
                Case "粗体"
                        $mystyle = 1
                Case "斜体"
                        $mystyle = 2
                Case "下划线"
                        $mystyle = 4
                Case "删除线"
                        $mystyle = 8
        EndSwitch
       
       
        _GDIPlus_Startup()
        ; Load image
        $hImage = _GDIPlus_ImageLoadFromFile($pic) ;$pic=@ScriptDir & "\50x50.bmp"
        $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
        $hBrush = _GDIPlus_BrushCreateSolid($color);返回实心画刷(Brush)对象句柄$color = 0xFF000000纯黑色
        $hFormat = _GDIPlus_StringFormatCreate();创建字符串格式对象
        $hFamily = _GDIPlus_FontFamilyCreate($font);创建字体族对象
        $hFont = _GDIPlus_FontCreate($hFamily, $size, $mystyle, 2);创建字体对象    2 - 像素单位
        $tLayout = _GDIPlus_RectFCreate($right, $top, 0, 0);创建 $tagGDIPRECTF(图形填充矩形) 结构
        $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $str, $hFont, $tLayout, $hFormat) ;测量字符串大小    - 接收字符串矩形边界的 $tagGDIPRECTF 结构
        $hMatrix = _GDIPlus_MatrixCreate() ;创建并初始化矩阵对象为单位矩阵返回矩阵对象句柄
        _GDIPlus_MatrixRotate($hMatrix, $nAngle, "False") ;旋转角度. 正值指定顺时针旋转.   False - 向右旋转矩形      -----设置旋转的参数
        _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix) ;设置图像对象的世界坐标空间

        _GDIPlus_GraphicsDrawStringEx($hGraphic, $str, $hFont, $aInfo, $hFormat, $hBrush);绘制字符串(使用数据结构).

       
       
        If $shuiyinpic <> "" And $picx <> "" And $picy <> "" Then ;不为空则添加水印图片
                $hImage1 = _GDIPlus_ImageLoadFromFile($shuiyinpic)
                _GDIPlus_GraphicsDrawImage($hGraphic, $hImage1, $picx, $picy)
        EndIf
       
        _GDIPlus_ImageSaveToFile($hImage, $savepic) ;图像保存到文件.
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_ImageDispose($hImage)
       
        _GDIPlus_Shutdown()
       
       
EndFunc   ;==>shuiyin

100.bmp为100*100像素的纯白图片。

生成的字符有甚至显示不完全,如何调整让其保持在中央呢?

仙乃日 发表于 2014-7-28 16:16:35

原来X、Y坐标的指定受字体的大小和旋转的角度影响。
页: [1]
查看完整版本: [已解决]如何让生成的字符保持在背景图片的中央?