afan 发表于 2019-8-8 23:18:37

印章图生成 1.9

本帖最后由 afan 于 2022-8-26 22:43 编辑

220826      发布1.9
      [新增]可导入一个图片代替棋盘格作为背景参照图
         如果有图章图片作为参照,可更容易模仿真实图章,现已加入该功能
         在预览图上点击右键,有三个菜单“浏览选择、自定义底图、棋盘格底图”
         默认底图为“棋盘格底图”,如需使用参照图,可“浏览选择”一个图片文件以导入
         图片载入时会拉伸至整个预览控件大小,因此,若截图时并非完全正圆也会拉伸成正圆效果
         相对应的,若参照图本身就是椭圆章,则截图时必须截为正方形构图,这样则不会拉伸
         注:窗口的 勾选/取消勾选“棋盘格底”复选框 仍作为 显示/不显示 背景底图功能

很久前写的一个小工具,抽空翻出来改改,弄上来凑凑热闹~
所有参数设置均可实时生成预览
整体倾斜度可更显自然
油墨透明度亦可在覆图时更简单
仿真划痕更具真实感
各个功能均有提示,可直接上手操作

注意:由于本程序的特殊性,为避免传播易用作非法途径,如需使用完整功能,需跟帖说明,本人可赠送身份识别码(仅对论坛1年以上老用户开放,免费注册)。
后续,免费注册期已过,确切的说是不再提供注册版,请知悉。
另,已注册的用户请勿传播,身份识别码全球唯一。



更新历史:

220826      发布1.9
      [新增]可导入一个图片代替棋盘格作为背景参照图
         如果有图章图片作为参照,可更容易模仿真实图章,现已加入该功能
         在预览图上点击右键,有三个菜单“浏览选择、自定义底图、棋盘格底图”
         默认底图为“棋盘格底图”,如需使用参照图,可“浏览选择”一个图片文件以导入
         图片载入时会拉伸至整个预览控件大小,因此,若截图时并非完全正圆也会拉伸成正圆效果
         相对应的,若参照图本身就是椭圆章,则截图时必须截为正方形构图,这样则不会拉伸
         注:窗口的 勾选/取消勾选“棋盘格底”复选框 仍作为 显示/不显示 背景底图功能

220515      发布1.8
      [修改]印痕镂空,达到更真实的模拟效果

220514      发布1.7
      [新增]可勾选“仿真印痕”模拟类似残印漏印以达到更真实的印章效果
         右键点击该复选框可生成随机印痕效果
         注:该功能仅供注册用户使用

200909      发布1.6
      [修正]在某些win10系统可能无法载入字体的问题

190819 发布1.5
      [新增]高清大图输出(此前最大440)
         可输出最大 1000 * 1000 的图片,以满足有特殊用途的用户需要
         当然不是简单的像素放大,那样会边界模糊
         此为矢量放大,可无限放大不模糊,只是此处完全没必要弄太大
         注:该功能仅供注册用户使用
      [修改]加宽字体选择弹出的下拉框,以满足习惯在列表中查看较长字体名的用户

190816 发布1.4
      [修正]项目上弧文本、中平文本留空时,保存后再打开会有默认文本的问题

190813 发布1.3
      [修改]正圆值越小,上弧下弧文字就越贴近边框的问题
      [新增]新增“生成新图片”按钮,使用路径“图章PIC\图章_日期”保存图片
      [修改]生成图片后不再询问,直接打开浏览

190813 发布1.2
      [新增]可添加下弧文本及相关控制
      [新增]棋盘格背景可关闭
      [修改]简易注册(仅对论坛1年以上老用户开放,免费注册),未注册限制如下:
         下弧文本不可用
         仅可使用棋盘格背景的PNG模式
         仅可保存输出尺寸小于120的Demo图片

190811 发布1.1
      [新增]增加可调节正圆值的滑块,以绘制椭圆章
      [新增]增加可调节出图大小的滑块,以输出小于440的小尺寸图片
      [修改]优化内存占用
      [修正]一处可能引起保存图片时窗口发生闪烁的问题

190810 发布1.0
      [新增]透明模式使用棋盘格背景,以在调整油墨不透明度时更直观
      [修改]按住滑块调节参数及任何调整操作,图像均不再闪烁,如丝般顺滑

190809 发布0.9
      [新增]增加调节外圆边框宽度及样式的滑块
      [新增]增加调节上弧文字距外圆边框距离的滑块
      [新增]增加调节中部文字高度的滑块
      [新增]滑块激活时可通过键盘的上下左右键或鼠标滚轮调节
      [新增]可选择字体并可单独选择

190808 初版发布0.8




**** Hidden Message *****

afan 发表于 2020-9-9 14:35:51

zpmc123 发表于 2020-9-9 14:34
可以正常使用!工具比起网上其它的好用多了,只是可惜错过了注册版!

简单,你点赞我送注册

lpxx 发表于 2019-8-9 07:39:24

为什么是0.8的版本

顽固不化 发表于 2019-8-9 07:45:46

处处为人民,人民的好版主

chzj589 发表于 2019-8-9 08:05:18

能选择圆圈的放大与缩小和字体,就更好。
源码可放出学习吗?

redapple2008 发表于 2019-8-9 09:27:11

不错,有想法。学习了。

afan 发表于 2019-8-9 09:31:44

lpxx 发表于 2019-8-9 07:39
为什么是0.8的版本

几年前的东西,因为有些小问题,比如调整参数时的实时生成画面有些闪烁,懒得弄了,个人觉得没到1.0的程度…

afan 发表于 2019-8-9 09:41:38

顽固不化 发表于 2019-8-9 07:45
处处为人民,人民的好版主

有需要的 这货就有意义了 :face (24):

afan 发表于 2019-8-9 09:59:10

chzj589 发表于 2019-8-9 08:05
能选择圆圈的放大与缩小和字体,就更好。
源码可放出学习吗?

圆圈的放大与缩小没有任何意义,我觉得首先这种设计就是错误的:
固定大小的画纸,不可能画出超出画面的圆;若画缩小的圆,又浪费了纸张的空间,留下太多的空白
我的设计是圆圈大小固定,即画纸空间最大化,但其内部的东西都可以放大与缩小,以达到整体大小观感的变化

对于适合印章的字体,其实也就宋体、隶书、楷书等等几种,最初有加入此功能的想法,后来想想就几种字体没必要就没搞了,如有需要加上也可以

源码很老很乱,恕不提供。昨天为了加个整体倾斜度都费了半天眼神,不知道当年怎么写的

chzj589 发表于 2019-8-9 10:10:43

afan 发表于 2019-8-9 09:59
圆圈的放大与缩小没有任何意义,我觉得首先这种设计就是错误的:
固定大小的画纸,不可能画出超出画面的 ...

谢谢解答。
如是生成图,己经答到了。
我是想章的外圆圈有大有小,直径有改变

itsky2 发表于 2019-8-9 10:51:54

版主怎么能这么强!!!

afan 发表于 2019-8-9 11:24:11

chzj589 发表于 2019-8-9 10:10
谢谢解答。
如是生成图,己经答到了。
我是想章的外圆圈有大有小,直径有改变

直径有变化其实就是我上面说的,如果前辈指的是粗细的话那是可以调整的,已经有此设计,暂未完成而已

chzj589 发表于 2019-8-9 11:36:11

afan 发表于 2019-8-9 11:24
直径有变化其实就是我上面说的,如果前辈指的是粗细的话那是可以调整的,已经有此设计,暂未完成而已

能把放大与缩小的代码提供,我感觉自己的代码不能缩放自如

chzj589 发表于 2019-8-9 11:46:56

afan 发表于 2019-8-9 11:24
直径有变化其实就是我上面说的,如果前辈指的是粗细的话那是可以调整的,已经有此设计,暂未完成而已

帮我看看代码,并修改一下

Func _Button1()
        GUICtrlSetState($Checkbox1a, 1)
        $zhang_danwei = GUICtrlRead($Input1)
        $zhang_jiaodu = _GUICtrlSlider_GetPos($qishijiao)
        $zhang_name = GUICtrlRead($Input3)
        $zhang_r = _GUICtrlSlider_GetPos($banjing)
        $zhang_jj = _GUICtrlSlider_GetPos($jiajiao)
        wjx($zhang_danwei, $zhang_jiaodu, $zhang_name, $zhang_r, $zhang_jj)
EndFunc   ;==>_Button1
Func wjx($zhang_danwei, $zhang_jiaodu, $zhang_name, $zhang_r, $zhang_jj);绘制五角星
        GUICtrlSendMsg($pic, 0x0172, 0, 0)
        _GDIPlus_Startup()
        $hImage = _GDIPlus_BitmapCreateFromScan0a(480, 480, 0, $GDIP_PXF32ARGB)
        $Graphic = _GDIPlus_ImageGetGraphicsContext($hImage)
        ;设置里程表的高和宽
        $Width = 480
        $Height = 480
        ;设置图形对象的渲染质量,设置文本输出外观
        _GDIPlus_GraphicsSetSmoothingMode($Graphic, 2)
        ;将绘图平面的坐标原点移到窗口中心
        _GDIPlus_GraphicsTranslateTransforma($Graphic, $Width / 2, $Height / 2)
        $zecc = GUICtrlRead($zec)
        ;绘制外圆
        $pen = _GDIPlus_PenCreate(0xFFff0000, $zecc)
        _GDIPlus_GraphicsDrawEllipse($Graphic, -($zhang_r / 2), -($zhang_r / 2), $zhang_r, $zhang_r, $pen)
        ;输出五角星
        Dim $r = Int($zhang_r * -0.15)
        Dim $PI = 3.1415926535897932384626433832795;$PI = 3.14159265358979;3.1415926
        Local $aPoints = [ _
                        , _
                        , _
                        , _
                        , _
                        , _
                        , _
                        , _
                        , _
                        [-(Int(Sin(72 * $PI / 180) * Cos(72 * $PI / 180) * $r / Cos(36 * $PI / 180))), -(Int(Sin(18 * $PI / 180) * Cos(72 * $PI / 180) * $r / Cos(36 * $PI / 180)))], _
                        [-(Int(Cos(18 * $PI / 180) * $r)), Int(Sin(18 * $PI / 180) * $r)], _
                        [-(Int(Tan(36 * $PI / 180) * Cos(72 * $PI / 180) * $r)), Int(Cos(72 * $PI / 180) * $r)], _
                        ]

        $Brush = _GDIPlus_BrushCreateSolid(0xFFff0000)
        _GDIPlus_GraphicsFillPolygon($Graphic, $aPoints, $Brush)

        ;输出文本
        $zeaa = GUICtrlRead($zea)
        $zebb = GUICtrlRead($zeb)
        $zedd = GUICtrlRead($zed)
        $zedx = GUICtrlRead($banjingx1)
        $zhang_rx = _GUICtrlSlider_GetPos($banjingx)
        $Family = _GDIPlus_FontFamilyCreate($zedd)
        $Font = _GDIPlus_FontCreate($Family, $zeaa, 1, 2);创建字体对象
        $Font1 = _GDIPlus_FontCreate($Family, $zebb, 1, 2);字体
        $Font2 = _GDIPlus_FontCreate($Family, $zedx, 1, 2)
        $Brush = _GDIPlus_BrushCreateSolid(0xFFDD2200);0xFFff0000)
        $Format = _GDIPlus_StringFormatCreate()
        _GDIPlus_StringFormatSetAlign($Format, 1)
        $zhang_w = _GUICtrlSlider_GetPos($zhang_l)
        $zhang_gg = _GUICtrlSlider_GetPos($zhang_g)
        $zhang_rx1 = _GUICtrlSlider_GetPos($banjingx)
        $zhang_rx2 = _GUICtrlSlider_GetPos($banjingx2)
        $zhang_r = _GUICtrlSlider_GetPos($banjing)
        $Layout = _GDIPlus_RectFCreate(-($zhang_r / 2) + (_GDIPlus_FontGetSizea($Font)) * 1 + 1, ($zhang_r + _GDIPlus_FontGetSizea($Font)) / 1.23 - $zhang_rx + 5, $zhang_r - (_GDIPlus_FontGetSizea($Font)) * 2, _GDIPlus_FontGetSizea($Font))

        $BA1 = $zhang_r / 3.5 - $zhang_r + $zhang_rx2 - 18
        $BA2 = $zhang_r / 2 - $zhang_r + $zhang_rx1
        $BA3 = $zhang_rx2
        $BA4 = $zhang_gg
        $Layout3 = _GDIPlus_RectFCreate($BA1, $BA2, $BA3, $BA4)
        $Layout2 = _GDIPlus_RectFCreate(-55, 60, 120, 100)
        _GDIPlus_GraphicsDrawStringEx($Graphic, $zhang_name, $Font2, $Layout, $Format, $Brush)

        _GDIPlus_GraphicsResetTransforma($Graphic)
        _GDIPlus_GraphicsTranslateTransforma($Graphic, $Width / 2, $Height / 2)
        _GDIPlus_GraphicsRotateTransforma($Graphic, $zhang_jiaodu)

        Dim $sp = StringSplit($zhang_danwei, "")
        For $i = 1 To $sp
                $Brush = _GDIPlus_BrushCreateSolid(0xFFff0000)
                $Layout = _GDIPlus_RectFCreate(-10, $zhang_r / (-2) + (_GDIPlus_FontGetSizea($Font)) / 2)
                _GDIPlus_GraphicsDrawStringEx($Graphic, $sp[$i], $Font, $Layout, $Format, $Brush)
                _GDIPlus_GraphicsRotateTransforma($Graphic, $zhang_jj)
        Next
        _GDIPlus_GraphicsResetTransforma($Graphic)
        $Bmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
        $OldBmp = GUICtrlSendMsg($pic, 0x0172, 0, $Bmp)
        $CLSID = _GDIPlus_EncodersGetCLSID("PNG")
        _WinAPI_DeleteObject($OldBmp)
        _WinAPI_DeleteObject($hImage)
        _GDIPlus_ImageDispose($hImage)
        _GDIPlus_GraphicsDispose($Graphic)
        _GDIPlus_PenDispose($pen)
        _GDIPlus_FontDispose($Font)
        _GDIPlus_FontFamilyDispose($Family)
        _GDIPlus_StringFormatDispose($Format)
        _GDIPlus_BrushDispose($Brush)
        _GDIPlus_Shutdown()
EndFunc   ;==>wjx

haijie1223 发表于 2019-8-9 12:21:13

不错的工具

afan 发表于 2019-8-9 12:22:59

chzj589 发表于 2019-8-9 11:46
帮我看看代码,并修改一下

你这代码我不好改,不好理解,费劲
光看五角星就醉了,不如帮助文档搜 _GDIPlus_PathWindingModeOutline 有实例。
缩放可以用到矩阵,比如帮助文档搜 _GDIPlus_MatrixScale
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 印章图生成 1.9