2010年10月 存档

VBS图片处理之用VBS转化图片格式

2010年10月19日,星期二

我们常常需要转化图片的格式,虽然用Windows自带的画图工具就可以实现,但是如果有大量的图片需要转化的时候呢?那就是WIA的Convert滤镜(Filter)大显身手的时候了。

Const wiaFormatBMP  = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatPNG  = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatGIF  = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"

Set Img = CreateObject("WIA.ImageFile")
Set IP = CreateObject("WIA.ImageProcess")
Img.LoadFile "test.bmp"
IP.Filters.Add IP.FilterInfos("Convert").FilterID
IP.Filters(1).Properties("FormatID").Value = wiaFormatJPEG
Set Img = IP.Apply(Img)
Img.SaveFile "test.jpg"

参考链接:Convert Filter: Create a Compressed JPEG File from Another File

VBS中也有Vector

2010年10月18日,星期一

对,你没看错,是VBS中的Vector,不是C++,也不是Java。

下面的示例演示了如何创建一个Vector对象并初始化为包含ASCII字符串"This is a test"的字节型Vector。

Dim v 'As Vector
Dim i 'As Integer
Set v = CreateObject("WIA.Vector")
v.SetFromString "This is a test", True, False
For i = 1 To v.Count
    MsgBox Chr(v(i))
Next

Vector更强大的地方在于可以用来创建图片,让我想到了PHP的GD库拓展,只可惜功能太简单了。

Set v = CreateObject("WIA.Vector")
For i = 1 To 200 * 200
	v.Add &HFF0000FF
Next
Set Img = v.ImageFile(200,200)
Img.SaveFile "Blue." & Img.FileExtension

Vector中的一个元素代表一个像素点,示例中的Vector对象有200*200个元素(像素点),每个像素的ARGB值都是FF0000FF(完全不透明的蓝色)。如果你足够强大,你完全可以用Vector来画一幅蒙娜丽莎。

参考链接:

  1. Vector Object
  2. Create and Initialize a Vector Object
  3. Create an ImageFile Object that Contains a Blank Page

用VBS获取图片分辨率

2010年10月17日,星期日

Windows Image Acquisition (WIA)是个好东西。虽然很久很久以前就知道有这么个东西,但是其时英语很烂,VBS更烂,就没有仔细研究。最近闲来没事,看了一下相关的文档,发现WIA没有想象中的强大,真失望。

Set Img = CreateObject("WIA.ImageFile")
Img.LoadFile "test.jpg"
WScript.Echo "Width = " & Img.Width
WScript.Echo "Height = " & Img.Height

参考链接:Display Detailed Image Information

用VBS下载国家地理每日一图

2010年10月16日,星期六

国家地理的每日一图栏目很不错,常有一些精彩的照片。

写个VBS脚本下载之并重命名为日期加上照片标题。

都是正则表达式,而且没有写注释的习惯,很乱。 (更多…)

隐藏系统托盘图标的小程序TrayHider

2010年10月15日,星期五

前几天有人问怎么隐藏程序的系统托盘图标,于是研究了一下,写了个小程序,虽然不知道为什么要隐藏系统托盘图标。

  • 仅支持32位系统,不支持64位
  • 双击左栏图标就可以隐藏对应的程序系统托盘图标
  • 热键Ctrl + Alt + D可以隐藏/显示程序主窗口
  • 支持命令行参数,如TrayHider.exe  QQ.exe隐藏QQ的托盘图标

参考链接:

  1. Вопросик .. для наших Win32 гуру
  2. Shell Tray Info – Arrange your system tray icons
  3. 隐藏Windows系统托盘图标(改进版)