所需图片文件打包下载:

代码片段:

#NoEnv
SetBatchLines -1
#SingleInstance Force
#Include <Gdip>

;---------------------------
; 如初
; 2021/4/21
;
;	每日健康打卡需要提供>4500步的微信步数截图
;	(为了没时间出去溜达的时候也能一样地打卡)
;--------------------------

if !pToken := Gdip_Startup() {
  MsgBox, 48, gdiplus error!, Gdiplus启动失败!请确保系统装有gdiplus
  ExitApp
}

pics := [9,9,9,9]  ; 数字是哪些(只能4位数字)

; 数字所在背景图片的x,y像素坐标
; Sx和Sy可以通过用画图打开背景图片来寻找坐标
Sx := 206
Sy := 1617

MsgBox 0x40, 提示, 背景图片一定要用当天的截图`n(只会覆盖步数区域的图像)
BackgroundPic := "背景.jpg" ;背景图片文件名

pBitmapAndG:=生成数字图片(pics)
插入数字图片并保存(BackgroundPic, pBitmapAndG, Sx, Sy)

Gdip_Shutdown(pToken) ; 关闭Gdip
ExitApp
return


插入数字图片并保存(BackgroundPic, pBitmapAndG, Sx, Sy){
  ; 读取背景
  pBitmapBG := Gdip_CreateBitmapFromFile(BackgroundPic)
  ; 获取背景的宽度和高度
  Width := Gdip_GetImageWidth(pBitmapBG), Height := Gdip_GetImageHeight(pBitmapBG)
  ; 获取数字图片宽度和高度
  Width_ := Gdip_GetImageWidth(pBitmapAndG[1]), Height_ := Gdip_GetImageHeight(pBitmapAndG[1])

  pBitmap := Gdip_CreateBitmap(Width, Height)
  G := Gdip_GraphicsFromImage(pBitmap)
  Gdip_DrawImage(G, pBitmapBG, 0, 0, Width, Height) ; 绘制背景
  Gdip_DrawImage(G, pBitmapAndG[1], Sx, Sy, Width_, Height_) ; 直接把图片全部画上去
  
  ;保存到文件
  Gdip_SaveBitmapToFile(pBitmap, "输出文件.png")

  ;丢弃位图
  Gdip_DisposeImage(pBitmap)
  Gdip_DisposeImage(pBitmapBG)
  Gdip_DisposeImage(pBitmapAndG)
  ;丢弃指针
  Gdip_DeleteGraphics(G)
  Gdip_DeleteGraphics(pBitmapAndG[2])
}



生成数字图片(pics){  ;生成数字图片 pics是数字组成的数组
  ; 单个数字图片是35*50

  ; 创建一个指定像素宽*高的gdi +位图(这是我们必须使用的整个绘图区域)
  pBitmap := Gdip_CreateBitmap(pics.Length() * 36, 50) ;留出数字间36-35=1的间隙
  ; 获取指向位图图形的指针G
  G := Gdip_GraphicsFromImage(pBitmap)

  ;填充背景颜色
  ; 创建一个白色画笔(将用于用白色填充背景)。笔刷完全不透明(ARGB)
  pBrush := Gdip_BrushCreateSolid(0xffffffff)
  ; 用白色画笔填充位图的整个图形(这将是背景色)
  Gdip_FillRectangle(G, pBrush, 0, 0, pics.Length() * 36, 50)
  ; 删除为节省内存而创建的笔刷,因为我们不再需要相同的笔刷
  Gdip_DeleteBrush(pBrush)
  ;填充结束

  ; 读取要用的数字图片并进行画图
  for n,Name in pics {
    x:=36*(n-1)
    y=0
    pBitmapFile:= Gdip_CreateBitmapFromFile(getPicFilePath(Name))
    Gdip_DrawImage(G, pBitmapFile, x, y, 35, 50) ;把数字图片全部画上去
    Gdip_DisposeImage(pBitmapFile) ;用完的图片丢弃
  }

  return [pBitmap,G] ;返回画好的位图
}

getPicFilePath(Name){ ;返回数字图片路径
  return A_ScriptDir "\number\" Name ".png"
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。