印章图生成 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 ***** zpmc123 发表于 2020-9-9 14:34
可以正常使用!工具比起网上其它的好用多了,只是可惜错过了注册版!
简单,你点赞我送注册 为什么是0.8的版本 处处为人民,人民的好版主 能选择圆圈的放大与缩小和字体,就更好。
源码可放出学习吗? 不错,有想法。学习了。 lpxx 发表于 2019-8-9 07:39
为什么是0.8的版本
几年前的东西,因为有些小问题,比如调整参数时的实时生成画面有些闪烁,懒得弄了,个人觉得没到1.0的程度… 顽固不化 发表于 2019-8-9 07:45
处处为人民,人民的好版主
有需要的 这货就有意义了 :face (24): chzj589 发表于 2019-8-9 08:05
能选择圆圈的放大与缩小和字体,就更好。
源码可放出学习吗?
圆圈的放大与缩小没有任何意义,我觉得首先这种设计就是错误的:
固定大小的画纸,不可能画出超出画面的圆;若画缩小的圆,又浪费了纸张的空间,留下太多的空白
我的设计是圆圈大小固定,即画纸空间最大化,但其内部的东西都可以放大与缩小,以达到整体大小观感的变化
对于适合印章的字体,其实也就宋体、隶书、楷书等等几种,最初有加入此功能的想法,后来想想就几种字体没必要就没搞了,如有需要加上也可以
源码很老很乱,恕不提供。昨天为了加个整体倾斜度都费了半天眼神,不知道当年怎么写的
afan 发表于 2019-8-9 09:59
圆圈的放大与缩小没有任何意义,我觉得首先这种设计就是错误的:
固定大小的画纸,不可能画出超出画面的 ...
谢谢解答。
如是生成图,己经答到了。
我是想章的外圆圈有大有小,直径有改变 版主怎么能这么强!!! chzj589 发表于 2019-8-9 10:10
谢谢解答。
如是生成图,己经答到了。
我是想章的外圆圈有大有小,直径有改变
直径有变化其实就是我上面说的,如果前辈指的是粗细的话那是可以调整的,已经有此设计,暂未完成而已
afan 发表于 2019-8-9 11:24
直径有变化其实就是我上面说的,如果前辈指的是粗细的话那是可以调整的,已经有此设计,暂未完成而已
能把放大与缩小的代码提供,我感觉自己的代码不能缩放自如
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
不错的工具 chzj589 发表于 2019-8-9 11:46
帮我看看代码,并修改一下
你这代码我不好改,不好理解,费劲
光看五角星就醉了,不如帮助文档搜 _GDIPlus_PathWindingModeOutline 有实例。
缩放可以用到矩阵,比如帮助文档搜 _GDIPlus_MatrixScale