ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aman1516

[讨论] 图个有趣,VBA也玩PS图片特效

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-4-7 14:17 | 显示全部楼层
老师,你的作品被评为精华,可喜可贺。就不要藏着掖着了,能否每一楼都传给程序,让我等学习一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-11 23:43 | 显示全部楼层
dongdonggege 发表于 2025-4-7 14:17
老师,你的作品被评为精华,可喜可贺。就不要藏着掖着了,能否每一楼都传给程序,让我等学习一下。

本贴为“讨论”,也没人参与,纯自娱自乐的研究下怎么“玩”罢了,承蒙版主加精,受宠若惊,贻笑大方。
若要用这些功能,放着PS、各种应用的神器不用,用这些胡乱拼凑破铁锤子去重复造轮子,实没必要。
楼层里面有代码模板、有核心算法代码(大部分都是往模板里套就行了)、有参考资料、有其他贴子老师们的例子与完整代码,最主要现时还有DeepSeeK......
好奇害死猫,一个数学问题引出更多的问题来,有兴趣就玩下,没兴趣,全是对作无用的东西


TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-12 09:33 | 显示全部楼层
继续 VBA学PS  扭曲系列之  弧形效果+卷轴
图像处理大致可以分为以下几类:
●独立像素点运算 —— 包括亮度、对比、饱和度、色调、灰色化等
●多个像素点运算 —— 一般是进行卷积变换,求均值,求中值,插值等,包括边缘检测、浮雕化、模糊、锐化
●几何变化 —— 矩阵变换。包括缩放、旋转、倾斜、扭曲、液化等
●多图像合成 —— 多张图像的处理,包括添加水印,贴纸,美妆等。
所以,弧形、卷轴等,基本还是数学上的事 —— 将直线影射到对应的曲线上
原图:
XY.jpg
影射为一段圆弧,弧形:
Arcp1.jpg Arcp2.jpg

连续圆弧或波浪曲线:
Arcp-Sl.jpg Arcp-Sr.jpg



TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-12 10:02 | 显示全部楼层
直线影射为一个圆,卷轴:

Arcp-Z.jpg
算法套入模板:
  1. Sub ArcImg()    '卷轴效果
  2.     Dim Img, Img1 'As ImageFile
  3.     Dim IP 'As ImageProcess
  4.     Dim v, v1 'As Vector
  5.     Dim f, f1, w As Long, h As Long, w1 As Long, w2 As Long, h1 As Long, h2 As Long, Z, ps As Integer
  6.     Dim i As Long, j As Long, k As Long, k1 As Long, ii As Long, jj As Long, R As Long
  7.     Const pi = 3.1415926
  8.     ''1弧度=57.3度, 1度=0.0174533弧度
  9.     'On Error Resume Next
  10.     Set Img = CreateObject("WIA.ImageFile")
  11.     Set Img1 = CreateObject("WIA.ImageFile")
  12.     Set IP = CreateObject("WIA.ImageProcess")
  13.     f1 = ThisWorkbook.Path & "\dt.bmp"
  14.     Img1.LoadFile f1
  15.     w1 = Img1.width
  16.     h1 = Img1.height
  17.     Set v1 = Img1.ARGBData
  18.     w = w1
  19.     R = w1 / (2 * pi)
  20.     h = h1 + R * (1 - Cos(w1 / (2 * R)))
  21.     Set v = CreateObject("WIA.Vector")
  22.     For Z = 1 To w * h
  23.         v.Add &HFFFFFFFF
  24.     Next
  25.     For i = 1 To h1
  26.         For j = 1 To w1
  27.             k1 = (i - 1) * w1 + j
  28.                     If j < w1 / 2 Then
  29.                         jj = w1 / 2 - R * Sin((w1 / 2 - j) / R)
  30.                         ii = R - R * Cos((w1 / 2 - j) / R) + i
  31.                     Else
  32.                         jj = w1 / 2 + R * Sin((j - w1 / 2) / R)
  33.                         ii = R - R * Cos((j - w1 / 2) / R) + i
  34.                     End If
  35.             k = (ii - 1) * w1 + jj
  36.             v(k) = v1(k1)
  37.        Next
  38.     Next
  39.     Set Img = v.ImageFile(w, h)
  40.     f = ThisWorkbook.Path & "\Arcpy.jpg"
  41.     If Dir(f) <> "" Then Kill f
  42.     Img.SaveFile f
  43.     MsgBox "ok!"
  44. End Sub
复制代码



TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-12 10:04 | 显示全部楼层
圆形似乎不符合视觉效果,椭圆好像更适合
PS未完待续......

TA的精华主题

TA的得分主题

发表于 2025-4-12 11:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
aman1516 发表于 2025-3-8 15:21
能否用VBA实现对两图进行布尔运算
https://club.excelhome.net/thread-1670687-1-1.html

老师,能否分享下用VBA实现对两图进行布尔运算?

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-12 11:35 | 显示全部楼层
关于椭圆影射的问题:
微信截图_20250412111935.png
求椭圆长半轴OA的弄出来了
  1. Function Tycz(zcL As Double, dbz As Double) As Double
  2.     Dim a As Long, pi, k, t, c, d, cbz
  3.     k = 1000000    ' <span style="background-color: rgb(255, 255, 255);">精度0.000001</span>
  4.     pi = 3.1415926
  5.     t = Int((zcL - 2 * pi * dbz + 4 * dbz) / 4)
  6.     c = dbz * k
  7.     For a = (t - 10) * k To (t + 10) * k
  8.         d = Abs(pi * (3 * (a + dbz * k) - Sqr((3 * a + dbz * k) * (a + 3 * dbz * k))) - zcL * k)
  9.         If d < c Then
  10.            c = d
  11.            cbz = a / k
  12.         End If
  13.     Next
  14.     Tycz = cbz
  15. End Function

  16. Sub tt()
  17. Dim L As Double, b As Double
  18. Debug.Print Tycz(400, 40)    '  83.468024
  19. End Sub
复制代码
直线影射到椭圆这步,DeepSeek用椭圆E点起顺时针,弧长等于直线长度(0~400)的算法,太复杂搞不懂,那位数学大咖可指点一下


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-12 11:55 | 显示全部楼层
shenjianrong163 发表于 2025-4-12 11:22
老师,能否分享下用VBA实现对两图进行布尔运算?

我是破电脑一直用Office 2007没升级没办法才瞎折腾
用2010以上版本菜单功能里面就有布尔运算处理

TA的精华主题

TA的得分主题

发表于 2025-4-12 12:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
aman1516 发表于 2025-4-12 11:55
我是破电脑一直用Office 2007没升级没办法才瞎折腾,
用2010以上版本菜单功能里面就有布尔运算处理

老师,我用Office2010也没有布尔运算。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-12 14:40 | 显示全部楼层
本帖最后由 aman1516 于 2025-4-13 21:37 编辑

ArcTy0.jpg 初步椭圆形卷轴效果:

ArcTy1.jpg
564.jpg ArcTyt.jpg
802.jpg ArcTys.jpg
439.jpg ArcTyh.jpg
椭圆形看上去顺眼多了,不足之处,起始位置是椭圆最右边端点开始,如果是从椭圆最下端处开始,图片就“居中”了,
或起始位置设置成椭圆指定角度上的点,可选项,
还有个顺时针、逆时针方向也是设置成可选择项,就完美了,仍需琢磨,
PS未完待续......


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-15 03:20 , Processed in 1.040054 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表