ImagePut - A core library for images in AutoHotkey (Now supports HEIC & WEBP)

Post your working scripts, libraries and tools.
iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 19 Oct 2021, 21:00

Do not use v2-beta.2
ImagePut v1.3
Supports crop and scale better.
  • Crop and scale is now accessible through the input object.
  • ImagePutWindow will scale down images to screen size. Also, right click to close.
  • Can now use a device context (dc) as an input and output type.
Bugfixes
  • Reenable file format conversions like .png → .jpg
  • Invalid image extensions will now produce an error.
  • Device dependent bitmaps are now accepted.
  • ImagePutHIcon was secretly making hBitmaps instead.
  • [v1] HBitmap detection no longer fails half the time.
  • [v2] Fix "expected an object" error messages.
https://github.com/iseahound/ImagePut/releases/tag/v1.3
Last edited by iseahound on 30 Jun 2022, 14:52, edited 2 times in total.

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 01 Jan 2022, 21:31

v2-beta.3 compatible
ImagePut v1.4
Support for PDF files.
  • To process PDF pages use ImagePutWindow({pdf: "doc.pdf", index: 2}).
  • Speed up processing of PNG streams on the clipboard.
  • Added a new function ImageDestroy() to cleanup images.
  • Now supports custom resolutions as scale:[width, height].
Bugfixes
  • Obsolete cursors were causing memory leaks.
  • Fixed put_window memory leaks.
  • Sometimes top level directories were created from a filepath.
  • Output of ImagePutFile no longer has double backslashes.
  • Downloading over the internet is now asynchronous.
https://github.com/iseahound/ImagePut/releases/tag/v1.4
Last edited by iseahound on 30 Jun 2022, 14:52, edited 2 times in total.

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 07 Jan 2022, 17:09

ImagePut v1.5
Add ImageShow()
  • ImageShow will display an image without a titlebar.
  • Add new Windows 10 cursors IDC_PIN, IDC_PERSON, and IDC_HANDWRITING.
  • Extend ImagePutWindow to accept window coordinates.
  • ImagePutBuffer works again on v2.
https://github.com/iseahound/ImagePut/releases/tag/v1.5
Last edited by iseahound on 04 Feb 2023, 10:32, edited 2 times in total.

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 01 Feb 2022, 14:35

ImagePut v1.6
DPI-awareness and multi-monitor support.
  • Screen capture is now DPI aware.
  • Window capture can now capture windows in different DPI contexts.
  • Monitor number inputs 0, 1, 2, now capture the full screen.
  • wallpaper now captures all wallpapers to the right of the primary screen.
  • ImageShow/ImagePutWindow no longer scale their contents to in different DPI contexts.
  • ImageShow/ImagePutWindow will always center the window regardless of screen DPI.
Bugfixes
  • ImagePutWindow(2) never actually worked for monitor numbers greater than 1.
  • Restore ImagePutWindow() alpha transparency. (Broken by v1.5)
  • Fix ImagePut("window", image) missing default window styles.
  • Accepts Device Context hdc inputs with device independent bitmaps selected.
  • hBitmaps that are selected onto a device context can now be copied.
Minor Adjustments
  • Cropping to zero width or height correctly returns the original image.
  • Fixes incorrect window width and height created by ImageShow().
  • Small windows created by ImageShow() were unable to be closed via right click.
  • The filepath parameter of ImagePutFile() now accepts forward slashes.
  • Cropping no longer occurs when coordinates are identical to the source image.
  • Decreased minimum string lengths for auto detection of base64 and hex data.
  • Hex string lengths are checked for a divisibility of 2.
https://github.com/iseahound/ImagePut/releases/tag/v1.6
Last edited by iseahound on 04 Feb 2023, 10:34, edited 2 times in total.

AHK_user
Posts: 515
Joined: 04 Dec 2015, 14:52
Location: Belgium

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by AHK_user » 11 Mar 2022, 14:42

Amazing library, cool :bravo:

Here is a small example to grap the 64bit string of an image:

Code: Select all

#Requires AutoHotKey v2.0-beta.3
#include ImagePut.ahk
if (A_Args.Length > 0){
    FilePath := A_Args[1]
}
else{
    FilePath := FileSelect(, , "Select an image file ", )
    if (FilePath = ""){
       ExitApp
    }
}

base64:= ImagePutBase64(FilePath,,100)
A_Clipboard := 'base64 :="' base64 '"'
MsgBox("This Base 64 string is copied to the clipboard`n" base64)

ExitApp

AHK_user
Posts: 515
Joined: 04 Dec 2015, 14:52
Location: Belgium

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by AHK_user » 13 Mar 2022, 10:38

I am loving this more and more.
I just created a simple script that lets you copy the base64 string of the active cursor, so you can use is anywhere.
This makes it very easy to copy cursors from other programs and include them in your script.

:bravo: :bravo: :bravo:

Code: Select all

#Requires AutoHotKey v2.0-beta.3
#SingleInstance force
#include ImagePut.ahk
global base64 :=""

TrayTip("F10: Restore cursor`nF11:Set copied cursor as cursor`nF12:Copy active cursor.`nEscape: Exitapp")

A_IconTip := "F10: Restore cursor`nF11:Set copied cursor as cursor`nF12:Copy active cursor.`nEscape: Exitapp"
; Restore Cursor
F10:: {
    ToolTip("Restored cursor")
    ImageDestroy(A_Cursor)
    DllCall("SystemParametersInfo", "uint", 20, "uint", 0, "ptr", 0, "uint", 2) ; Restore cursors
}

; Set copied cursor as cursor
F11:: {
    global
    if (base64!=""){
        ImagePutCursor(base64)
        ToolTip("Changed cursor")
    }
    return
}

;Copy the active cursor
F12::{
global
    base64:= ImagePutBase64(A_Cursor,,100)
    A_Clipboard := 'base64 :="' base64 '"'
    ToolTip("The Base 64 string is copied to the clipboard`n")
    return
}

Escape::{
ExitApp 
}

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 13 Mar 2022, 11:18

Glad you like it!

EDIT: I gave your second script a run, and I had no idea it was possible to steal cursors from Photoshop and other apps.

Paste the following directly into your browser's url thing:

The Photoshop loading circle

Code: Select all

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAE/SURBVFhH7ZPBiYRAFEQ9qjAJTACTwOBFjcQUnCBMYBJoMQpT8CK0GSnsL6mRnl4Xe1H00g8KvvWRqsY28PxFXddF0zQKwkx7oSzLQqSoX/tdMFybMksg8PV6aVOHlsCp7QLwuEYBtVJg2e8GYVb4uQUu/wSAJc67hF3X3YZheEKYaTuTpuktz/MnhJm2G33fPyS4FWmqhcf1JkmSPLIsayVcQ5jhcb2N1vpthM+Cx/UmEvj+hBslnN8PJFDZBeBxvYmEqZUC7n+FhFVWOFRxvYmEVSsFnN9Hgbvo6w7A43oTuXR3Cfy6A/C4dkdC57+Aj/9Gwue/gI/7GMexmKZJQZhpL4RhWERRpCDMtI+B4dqUWQKBcRxrU4eWwKntAvC4DnBquwA8rveDMCv83AKXfwLAEtdcQo/H4/GcRxD8ALLvrmjcrZvAAAAAAElFTkSuQmCC
The Photoshop size 50 brush zoomed in

Code: Select all

data:image/png;base64,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
It doesn't seem capable of stealing the regular text cursor, because it uses a different (older) format consisting of an and mask and a xor mask.

AHK_user
Posts: 515
Joined: 04 Dec 2015, 14:52
Location: Belgium

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by AHK_user » 13 Mar 2022, 15:32

iseahound wrote:
13 Mar 2022, 11:18
Glad you like it!

EDIT: I gave your second script a run, and I had no idea it was possible to steal cursors from Photoshop and other apps.

Paste the following directly into your browser's url thing:

The Photoshop loading circle

Code: Select all

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAE/SURBVFhH7ZPBiYRAFEQ9qjAJTACTwOBFjcQUnCBMYBJoMQpT8CK0GSnsL6mRnl4Xe1H00g8KvvWRqsY28PxFXddF0zQKwkx7oSzLQqSoX/tdMFybMksg8PV6aVOHlsCp7QLwuEYBtVJg2e8GYVb4uQUu/wSAJc67hF3X3YZheEKYaTuTpuktz/MnhJm2G33fPyS4FWmqhcf1JkmSPLIsayVcQ5jhcb2N1vpthM+Cx/UmEvj+hBslnN8PJFDZBeBxvYmEqZUC7n+FhFVWOFRxvYmEVSsFnN9Hgbvo6w7A43oTuXR3Cfy6A/C4dkdC57+Aj/9Gwue/gI/7GMexmKZJQZhpL4RhWERRpCDMtI+B4dqUWQKBcRxrU4eWwKntAvC4DnBquwA8rveDMCv83AKXfwLAEtdcQo/H4/GcRxD8ALLvrmjcrZvAAAAAAElFTkSuQmCC
The Photoshop size 50 brush zoomed in

Code: Select all

data:image/png;base64,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
It doesn't seem capable of stealing the regular text cursor, because it uses a different (older) format consisting of an and mask and a xor mask.
Is this the correct Photoshop brush? :D
Indeed funny that even Photoshop cursors can be copied, I was testing it in good old paint.
brush.png
brush.png (90.29 KiB) Viewed 4893 times

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 24 Apr 2022, 13:41

ImagePut v1.7
Added PixelSearch. Supports WICBitmaps.
  • Add ImageWidth() and ImageHeight().
  • Implement PixelSearch for ImagePutBuffer.
  • Extend ImagePutBuffer with width and height properties.
  • Support new conversion type wicBitmap.
  • Keyword arguments are now passed to from_XXX functions.
  • Positional arguments have always been passed to put_XXX functions.
Improvements and Bugfixes
  • Allow special syntax ImagePutFile(0) to generate a sequence of files.
  • Stream header size increased to use 256 bytes for extension detection.
  • Use the native DPI awareness of the window to prevent black borders.
  • No longer locks files while reading.
  • Increase speed reading from files.
  • 2x speed converting to and from base64 and hex.
  • 3x speed when input type is a sprite.
  • {image: foo} is now accepted everywhere.
  • Read from IWICBitmapSource and IWICBitmap.
https://github.com/iseahound/ImagePut/releases/tag/v1.7

Here's a simple example for pixel search:

Code: Select all

#include ImagePut.ahk
#singleinstance force

; This script runs on both AutoHotkey v1 and v2. 
hwnd := ImagePutWindow("https://picsum.photos/500", "Thank you for trying ImagePut ♥", [A_ScreenWidth/6])

; Create a buffer from the window.
image := ImagePutBuffer(hwnd)

; Find a white pixel.
if xy := image.PixelSearch(0xFFFFFF)
   MsgBox xy.x ", " xy.y
else
   MsgBox "Try again. No white pixel was found!"
Last edited by iseahound on 04 Feb 2023, 10:33, edited 1 time in total.

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 14 Jun 2022, 16:25

ImagePut v1.8

Animate GIFs
  • GIFs are now animated by ImageShow and ImagePutWindow
  • ImagePutURI produces base64 data with a MIME type
  • ImageDestroy supports releasing WIC bitmaps
Improvements
  • 10x speed set_hex
  • Partial arrays allowed in ImagePutScreenshot(img, [0,0])
  • Patched small memory leak with mime type detection * Closing one window no longer closes all windows
ImagePutBuffer
  • Add ImageSearch, Colorkey, SetAlpha, Transcolor
  • Ability to crop and return a new buffer
  • show() → ImageShow; show(1) → ImagePutWindow
  • Add PixelSearch variation
https://github.com/iseahound/ImagePut/releases/tag/v1.8.1
Last edited by iseahound on 04 Feb 2023, 10:34, edited 1 time in total.

N_athan
Posts: 40
Joined: 21 Aug 2021, 16:40

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by N_athan » 29 Jun 2022, 09:48

I know that gdip lib has Gdip_ResizeBitmap to resize pictures, does `ImagePut` has any similar function to upscale a picture without losing much of its quality?


Spitzi
Posts: 309
Joined: 24 Feb 2022, 03:45

ImagePut for Image Filtering

Post by Spitzi » 09 Aug 2022, 16:20

Hi @iseahound

I stumbled upon ImagePut and I asked me if I could use it for my project: I have grayscale images with colored text on it, and I would like to convert the image to white with black text (to improve OCR)

my questions:
1) can that be done with ImagePut? And will it be fast?
2) how does ImagePut - ImageSearch compare to the ahk-ImageSearch regarding speed and robustness

Thanks Simon

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 06 Nov 2022, 00:00

ImagePut v1.9

New features:
  • ImagePutSafeArray() - Stores the image into a safe array
  • ImagePutExplorer() - Copies an image into the last active windows explorer folder
Improvements:
  • Major improvements to ImageSearch including the ability to ignore transparency in the search image
  • PixelSearch now has variation, and can search ARGB ranges (for each individual red bluegreen alpha channel) * Buffers can now be enumerated over with a for loop as in for x, y, color in ImagePutBuffer(0)
  • Buffers can save() a raw bitmap
  • Monitor numbers 0, 1, 2, 3... now have a higher priority over other image types
Possible Breaking Change
  • Filenames now have priority over window titles. This means that if there is a file named "photo.png" and a window title with the name "photo.png" the file will be used. This resolves possible unintuitive behavior where if a file open is in a photo editor, a screenshot of the photo editor would take priority over the actual file.
https://github.com/iseahound/ImagePut/releases/tag/v1.9

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 23 Feb 2023, 15:09

Just a quick FYI to all users of AutoHotkey v2: This script supports pixelsearch and imagesearch. Loosely based on Gdip_ImageSearch. Look forward to a new update of ImagePut soon!

https://github.com/iseahound/ImagePut/wiki/PixelSearch-and-ImageSearch

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 02 Mar 2023, 16:07

AutoHotkey v2.0-beta.13+
ImagePut v1.10

32-bit stability fixes, ImageSearchAll(), PixelSearchAll()

ImagePutBuffer Changes
  • PixelSearchAll and ImageSearchAll can now return multiple matches
  • PixelSearch supports searching for a color with 3 variations (red, blue, green)
  • Transcolor() and Colorkey() now select the top-left pixel by default
  • Add Clone() to create a duplicate bitmap
  • [v1] Fix crop method
  • Save() now works even if the image width and height is updated
Other Changes
  • ImagePut is now stable on AutoHotkey 32-bit versions!
    • Fixed GIF rendering
    • Fixed thrown errors with "cdecl"
  • [v2] You can now drag and drop multiple images onto ImagePut.ahk to show them without closing previous windows.
  • Dragging one animated GIF no longer pauses other animated GIFs
Note: AutoHotkey v1 ANSI is still supported, although unicode characters will appear garbled.

https://github.com/iseahound/ImagePut/releases/tag/v1.10

elbitjusticiero
Posts: 75
Joined: 06 May 2017, 11:07

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by elbitjusticiero » 21 Mar 2023, 09:26

Very interesting!

Any plans to support WEBP format? That would allow me to port some stuff from AHK v1 to v2.

Anyway, I'll be using this for new scripts. It looks amazing!

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 21 Mar 2023, 10:31

Hmm... that would take some time to implement. I believe windows already supports Webp and HEIC (assuming you paid $1 for it) so it's a question of rewriting the current base of GDI+ to use WIC (Windows Imaging Component) just for those two formats. Basically if there are enough user requests I can look into adding support for it :)

Some support for other formats is available as long as you don't need to "decode" the image. Affects: pdf, url, file, stream, randomaccessstream, base64, and hex. So you should be able to download an image or any file really using ImagePutFile("https://example.com") https://github.com/iseahound/ImagePut/wiki/Crop,-Scale,-&-Other-Flags#decode

elbitjusticiero
Posts: 75
Joined: 06 May 2017, 11:07

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by elbitjusticiero » 21 Mar 2023, 12:13

Hmmm. I didn't realize that. (I'm completely ignorant about everything related to image processing.) I'll look into it, thank you!

Currently, I'm using a script that calls an external DLL for converting a WEBP file into a HBITMAP so I can put it in a Gui. It's for AHK v1, though.

iseahound
Posts: 1434
Joined: 13 Aug 2016, 21:04
Contact:

Re: ImagePut - Image library for converting to files, streams, windows, base64, urls, cursors, screen coordinates, clipb

Post by iseahound » 21 Mar 2023, 12:19

Yeah, this library kind of already does everything I need it to do, everything after ImagePut v1.2 is basically stuff other people might find useful. So really the more people comment, the higher it will be on my priority list.

Post Reply

Return to “Scripts and Functions (v2)”