本文作者:空

 

本教程内容基于 iseahound 于 2022-11-06 发布的 ImagePut 1.9 版写作。

ImagePut 是 iseahound 写的一个图片操作库,大部分常见图片操作都可以用极为简单的方式实现。


如何使用?

下载 https://github.com/iseahound/ImagePut 里面的 ImagePut (for v1).ahk 重命名为 ImagePut.ahk 。

在你的代码中像这样引用它。

#Include ImagePut.ahk ; 引用库

 


能做什么?

ImagePutFile(Image) ; 将图片存为文件
ImagePutClipboard(Image) ; 将图片存入剪贴板
ImagePutWindow(Image) ; 将图片显示出来
ImageShow(Image) ; 将图片显示出来(无标题栏)
ImagePutBase64(Image) ; 将图片转换为 base64 编码后的字符串
ImagePutURI(Image) ; 将图片转换为 base64 编码后的字符串(带 URI 头)
ImagePutHex(Image) ; 将图片转换为 16进制 编码后的字符串
ImagePutWallpaper(Image) ; 将图片设为桌面壁纸
ImagePutDesktop(Image) ; 将图片放在桌面壁纸前、桌面图标后的位置
ImagePutCursor(Image) ; 将图片设为鼠标样式
ImageEqual(Images*) ; 比较多张图片是否相同
ImageWidth(Image) ; 返回图片宽度
ImageHeight(Image) ; 返回图片高度

 

参数 Image 非常神奇,可以是屏幕坐标、本地图片、 PDF 文档、 URL 、 base64 字符串、 16进制 字符串等各种形式的图片。

以下使用 ImagePutWindow() 进行演示,方便直接观察结果。


简单示例

显示本地图片

ImagePutWindow("1.png") ; 显示本地图片

显示网上图片(这里用的是百度的 logo )

ImagePutWindow("https://www.baidu.com/img/flexible/logo/pc/result.png") ; 显示网上图片(这里用的是百度的 logo )

显示 pdf 文档

ImagePutWindow("1.pdf") ; 显示 pdf 文档

显示 pdf 文档第2页

ImagePutWindow({image:"1.pdf", index:2}) ; 显示 pdf 文档第2页

显示 pdf 文档最后1页

ImagePutWindow({image:"1.pdf", index:-1}) ; 显示 pdf 文档最后1页

根据坐标截图并显示

ImagePutWindow([0, 0, 100, 100]) ; 根据坐标 [X, Y, W, H] 截图并显示

根据窗口截图并显示(这里用的是记事本窗口)

ImagePutWindow("ahk_exe notepad.exe") ; 根据窗口截图并显示(这里用的是记事本窗口)

显示剪贴板内图片

ImagePutWindow(ClipboardAll) ; 显示剪贴板内图片

显示当前鼠标指针

ImagePutWindow(A_Cursor) ; 显示当前鼠标指针

显示当前壁纸

ImagePutWindow("wallpaper") ; 显示当前壁纸

显示所有显示器内容

ImagePutWindow(0) ; 显示所有显示器内容

显示第1台显示器内容

ImagePutWindow(1) ; 显示第1台显示器内容

显示第2台显示器内容

ImagePutWindow(2) ; 显示第2台显示器内容

显示 base64 编码后的图片(这里是一个鼠标指针图案)

ImagePutWindow("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVFhH7ZK9CsIwFIVv0bVarZNv4eRT+Iq+hB3r0k1wEUFdi0OLU8GCioPek0S0/i5NApIPCslt4Hw9KRH5GTW7Q17YggW81tSihJ9dGIsSUgBYkrgLAAsSVQFgWOJVABiUeC8ADEl8FjieziYkPguAotjrlvguAPJ8p1PitwBI062UqJ+qQFke1Er9hM9P/dwFEM77chLFYs+BMTXCkTqoCylwC5f33FpiJmrntTqoCz+rhjNeECXJDA7cQhDpbUHc60M4kC2sIbBabdDCQr0xCH85wkUL1J6rqUnCPlogrzMm6g3U0OFwOByOf4PoCtGPXlXT5OFnAAAAAElFTkSuQmCC") ; 显示 base64 编码后的图片(这里是一个鼠标指针图案)

显示 16进制 编码后的图片(这里是一个鼠标指针图案)

ImagePutWindow("89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000000017352474200aece1ce90000000467414d410000b18f0bfc6105000000097048597300000ec300000ec301c76fa864000000f1494441545847ed92bd0ac23014856fd1b55aad936fe1e453f88abe841debd24d7011415d8b438b53c1828a83de9344b4fe2e4d02920f0ac96de07c3d2911f91935bb435ed88205bcd6d4a2849f5d188b1252005892b80b000b1255016058e255001894782f000c497c16389ece26243e0b80a2d8eb96f82e00f27ca753e2b70048d3ad94a89faa40591ed44afd84cf4ffddc0510cefb7212c562cf813135c2913aa80b29700b97f7dc5a62266ae7b53aa80b3fab86335e1025c90c0edc4210e96d41dceb4338902dac21b05a6dd0c242bd31087f39c2450bd49eaba949c23e5a20af3326ea0dd4d0e170381c8e7f83e80ad18f5e55d3e4e1670000000049454e44ae426082") ; 显示 16进制 编码后的图片(这里是一个鼠标指针图案)

比较3张图片是否相同

ImageEqual(A_Cursor, "cats.jpg", [0,0,100,100]) ; 比较3张图片是否相同

获取图片宽高

MsgBox % ImageWidth("1.png") ; 获取图片宽度
MsgBox % ImageHeight("1.png") ; 获取图片高度

举一反三

要把 jpg 转为 gif 怎么办呢?

ImagePutFile("x:\1.jpg", "2.gif")

要把 pdf 转为 jpg 怎么办呢?(这里只转换了第1页)

ImagePutFile("x:\1.pdf", "2.jpg")

要把截图存到剪贴板怎么办呢?

ImagePutClipboard([0, 0, 100, 100])

要把百度logo设为壁纸怎么办呢?

ImagePutWallpaper("https://www.baidu.com/img/flexible/logo/pc/result.png")

要把当前鼠标样式存为字符怎么办呢?

当前鼠标样式 := ImagePutBase64(A_Cursor)

缩放与裁剪

缩放

ImagePutWindow({image: "x:\1.jpg", scale: 1.25}) ; 放大到1.25倍。 scale 可以是小数
ImagePutWindow({image: "x:\1.jpg", scale: 0.5}) ; 缩小到0.5倍。 scale 可以是小数
ImagePutWindow({image: "x:\1.jpg", scale: [300, 600]}) ; 将图片缩放为 300x600 (注意:指定完整宽高的缩放将无视图片原始宽高比)
ImagePutWindow({image: "x:\1.jpg", scale: [300, ""]}) ; 将图片宽度缩放为300 高度按原始宽高比自动缩放
ImagePutWindow({image: "x:\1.jpg", scale: ["auto", 600]}) ; 将图片高度缩放为600 宽度按原始宽高比自动缩放

裁剪

ImagePutWindow({image: "x:\1.jpg", crop: [0, 0, -100, 200]}) ; 格式 [X, Y, W, H] 。这里表示:宽度减少100像素 高度保留200像素
ImagePutWindow({image: "x:\1.jpg", crop: [0, "10%", "50%", "-20%"]}) ; 百分比要加引号。这里表示:从顶端10%的位置开始裁剪 并且宽度保留50% 高度减少20%

高级功能

上面只是介绍了 imagePut 的基本使用,实际上它还有以下这些高级功能。

ImagePutBitmap ; 存为 Bitmap (Gdip 常用)
ImagePutBuffer ; 存为 Bitmap 并返回一个对象,可以从对象中读取图片宽高大小或每个像素的值,亦可修改每个像素的值
ImagePutDC ; 存入 DC
ImagePutExplorer ; 将图片保存到最近打开的资源管理器路径中(例如打开了 c:\ 则存到此处,没有则存到桌面)
ImagePutFormData ; 存为 FormData (POST 方式上传数据时常用)
ImagePutHBitmap ; 存为 HBitmap (Gdip 常用)
ImagePutHIcon ; 存为 HIcon (Gdip 常用)
ImagePutRandomAccessStream ;
ImagePutSafeArray ;
ImagePutScreenshot ; 存入屏幕 DC
ImagePutStream ;
ImagePutWICBitmap ;
ImageDestroy ; 销毁 Image

由于高级功能大部分读者是用不到的,因此这里仅作简单解释,详细说明与示例,请移步原始文档自行了解。

 

dbgba追加的常用示例:

; 函数用法详解:https://github.com/iseahound/ImagePut/wiki/Input-Types-&-Output-Functions
#Include <ImagePut>
SetBatchLines -1

; ImagePutWindow是以Gui显示
; ImagePutWindow({image: "D:\PSTools\图标\11原图.png", scale: 1.25})  ; 放大到1.25倍。 scale 可以是小数

ImagePutWindow("iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAACGSURBVDhP5ZThCoAgDIRd7//O1cggz9tOQ/rTB1KpfDsnZPtJWchWn8v4Tmhm9e0CvyOo8K3MoZfigue0EjZ7lRDlCK53R1Zp1Lq85SwdoxGq6gws2CVkiaJCbL4RzsgiZA+drI9YMBWqdKyQTJilY6TCERnuGerhDENC7+U9VOrf/bFLOQBFID0mPAYl2wAAAABJRU5ErkJggg==")

Return

; base64 := ImagePutBase64("cats.jpg")

; ImagePutWindow({window: "ahk_class 指定窗口截图", crop: [0, 0, 100, 100]})

; ImagePutWindow(hBitmap)  ; ImagePut可直接输入hBitmap

; ImagePutScreenshot是以截图贴片显示
; ImagePutScreenshot({file: "D:\PSTools\图标\11原图.png", scale: 1.25})

; ImagePutFile是转换文件输出【OpenCV放大倍数1.1和1.25】

; ImagePutFile({image: "D:\PSTools\图标\QQ群图标.png", scale: 1.25}, "D:\PSTools\图标\QQ群图标2.png")

; MsgBox % Clipboard := ImagePutBase64("test.jpg")

; WinGetPos, X, Y, W, H, A
; ImagePutClipboard([X, Y+35, W-40, H-35])  ; 根据坐标 [X, Y, W, H] 截图到剪贴板

; ({image: [199, 229, 1280, 340], scale: 0.35})  ; 截图+缩放

; 对左上角像素进行采样并将该颜色的所有像素设置为透明。
; ImagePutWindow({sprite: "D:\PSTools\图标\11原图.png"})

; ImagePutWindow({image: "x:\1.jpg", scale: 0.5})            ; 缩小到0.5倍。 scale 可以是小数
; ImagePutWindow({image: "x:\1.jpg", scale: [300, 600]})     ; 将图片缩放为 300x600 (注意:指定完整宽高的缩放将无视图片原始宽高比)
; ImagePutWindow({image: "x:\1.jpg", scale: [300, ""]})      ; 将图片宽度缩放为300 高度按原始宽高比自动缩放
; ImagePutWindow({image: "x:\1.jpg", scale: ["auto", 600]})  ; 将图片高度缩放为600 宽度按原始宽高比自动缩放

 

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