Get the height / width of an image - to an array (object) Topic is solved

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
User avatar
SKAN
Posts: 1551
Joined: 29 Sep 2013, 16:58

Re: Get the height / width of an image - to an array (object)

02 Oct 2020, 07:05

mikeyww wrote: it retrieved the wrong dimensions for one of my JPG files, so I'm not able to use it.
:o Thanks for testing. I will check the function with more samples. :thumbup:
teadrinker
Posts: 4412
Joined: 29 Mar 2015, 09:41
Contact:

Re: Get the height / width of an image - to an array (object)

02 Oct 2020, 09:33

BoBo wrote: My output
My one:
 
(176) Имя папки — Folder name
(178) Расположение — Location
A_AhkUser
Posts: 1147
Joined: 06 Mar 2017, 16:18
Location: France
Contact:

Re: Get the height / width of an image - to an array (object)

02 Oct 2020, 14:03

mikeyww wrote:
01 Oct 2020, 14:29

A little trick to find an image's size is below.

Code: Select all

imgWidth(img, ByRef height) { ; Get image's dimensions
 If FileExist(img) {
  GUI, Add, Picture, hwndpic, %img%
  ControlGetPos,,, width, height,, ahk_id %pic%
  Gui, Destroy
 } Else height := width := 0
 Return width
}
Nice trick :thumbup:
Although for a function I would probably enclose GUI commands with the followings:

Code: Select all

defaultGUI := A_DefaultGui
GUI, New
; ...
GUI %defaultGUI%:Default
defaultGUI := A_DefaultGui
GUI, New wrote: On the positive side:

Calling Gui New ensures that the script is creating a new GUI, not modifying an existing one.
source GUI, New

cheers :wave:

A_AhkUser
my scripts
User avatar
mikeyww
Posts: 27372
Joined: 09 Sep 2014, 18:38

Re: Get the height / width of an image - to an array (object)

02 Oct 2020, 14:06

Good point. I agree. I've switched to the other method because it's faster! Nonetheless, both work.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Get the height / width of an image - to an array (object)

02 Oct 2020, 15:12

teadrinker wrote:
02 Oct 2020, 09:33
BoBo wrote: My output
My one:
 
(176) Имя папки — Folder name
(178) Расположение — Location
Once I loop through (all?) 283 properties you can see (within my previous excerpt) that there are several 'empty' lines. I'd guess once we're adding those to your numbers/positions for width/height = 162/164 we'll coming close to that 176/178 pattern. Looks like the script filters differently (no idea if we're using the same?).
teadrinker
Posts: 4412
Joined: 29 Mar 2015, 09:41
Contact:

Re: Get the height / width of an image - to an array (object)

02 Oct 2020, 20:01

BoBo wrote: I'd guess once we're adding those to your numbers/positions for width/height = 162/164 we'll coming close to that 176/178 pattern
I don't think so. :) I used this code:

Code: Select all

#NoEnv
SetBatchLines, -1

filePath := "D:\Screenshots\2020.10.02-02.12.47.7.jpg"

res := ReadMetaData(filePath)
Run, notepad,,, PID
WinWait, ahk_pid %PID%
ControlSetText, Edit1, % res

ReadMetaData(filePath) {
   SplitPath, filePath, name, dir
   Folder := ComObjCreate("Shell.Application").NameSpace(dir)
   FolderItem := Folder.ParseName(name)
   Loop 300 {
      i := A_Index - 1
      value := Folder.GetDetailsOf(FolderItem, i)
      name := Folder.GetDetailsOf(0, i)
      if (value != "")
         res .= "(" . i . ") " name . ": " . value . "`r`n"
   }
   Return res
}
Lines with empty values are skipped, but numbers are incremented.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Get the height / width of an image - to an array (object)

03 Oct 2020, 02:59

OK, so I've used your script (with my image) that returned that output ...

Code: Select all

(0) Name: Sunflower_from_Silesia1.jpg
(1) Größe: 196 KB
(2) Elementtyp: JPG-Datei
(3) Änderungsdatum: 02.10.2020 00:32
(4) Erstelldatum: 02.10.2020 00:31
(5) Letzter Zugriff: 03.10.2020 09:49
(6) Attribute: A
(9) Erkannter Typ: Bild
(10) Besitzer: DESKTOP-LV8UQOU\BoBo
(11) Art: Bild
(19) Bewertung: Nicht bewertet
(31) Abmessungen: ‪1000 x 697‬
(57) Gesamtgröße: 118 GB
(61) Computer: DESKTOP-LV8UQOU (dieser PC)
(164) Dateierweiterung: .jpg
(165) Dateiname: Sunflower_from_Silesia1.jpg
(169) Freier Speicherplatz: 17,3 GB
(174) Bittiefe: 24
(175) Horizontale Auflösung: ‎72 dpi
(176) Breite: ‎1000 Pixel
(177) Vertikale Auflösung: ‎72 dpi
(178) Höhe: ‎697 Pixel
(187) Freigegeben: Nein
(190) Ordnername: Bilder
(191) Ordnerpfad: C:\Benutzer\BoBo\Bilder
(192) Ordner: Bilder (C:\Benutzer\BoBo)
(194) Pfad: C:\Benutzer\BoBo\Bilder\Sunflower_from_Silesia1.jpg
(196) Typ: JPG-Datei
(202) Verknüpfungsstatus: Nicht aufgelöst
(254) Verwendeter Speicherplatz: ‎85%
(270) Ausrichtung: Normal
(295) Freigabestatus: Privat
(296) : Verfügbar
So, guessing time :think: the order of listed items is related to the local language setting/the windows (10) version/... ??? :?:
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Get the height / width of an image - to an array (object)

03 Oct 2020, 05:24

@SKAN - Thx :) ... that makes it even more irritating (at least for me) as your list isn't showing the width/height assignments at pos 176/178 for Win10, while it delivers exactly that outcome for me. I'm on Win10 v1903 (Build 18362.1082)

:)
User avatar
SKAN
Posts: 1551
Joined: 29 Sep 2013, 16:58

Re: Get the height / width of an image - to an array (object)

03 Oct 2020, 13:29

BoBo wrote: your list isn't showing the width/height assignments at pos 176/178 for Win10, while it delivers exactly that outcome for me. I'm on Win10 v1903 (Build 18362.1082)
:)
You're right @BoBo :thumbup:
That was list was generated on some earliest version of Win 10.

Win10 v2004

Code: Select all

0  	Name
1  	Size
2  	Item type
3  	Date modified
4  	Date created
5  	Date accessed
6  	Attributes
7  	Offline status
8  	Availability
9  	Perceived type
10 	Owner
11 	Kind
12 	Date taken
13 	Contributing artists
14 	Album
15 	Year
16 	Genre
17 	Conductors
18 	Tags
19 	Rating
20 	Authors
21 	Title
22 	Subject
23 	Categories
24 	Comments
25 	Copyright
26 	#
27 	Length
28 	Bit rate
29 	Protected
30 	Camera model
31 	Dimensions
32 	Camera maker
33 	Company
34 	File description
35 	Masters keywords
36 	Masters keywords
42 	Program name
43 	Duration
44 	Is online
45 	Is recurring
46 	Location
47 	Optional attendee addresses
48 	Optional attendees
49 	Organizer address
50 	Organizer name
51 	Reminder time
52 	Required attendee addresses
53 	Required attendees
54 	Resources
55 	Meeting status
56 	Free/busy status
57 	Total size
58 	Account name
60 	Task status
61 	Computer
62 	Anniversary
63 	Assistant's name
64 	Assistant's phone
65 	Birthday
66 	Business address
67 	Business city
68 	Business country/region
69 	Business P.O. box
70 	Business postal code
71 	Business state or province
72 	Business street
73 	Business fax
74 	Business home page
75 	Business phone
76 	Callback number
77 	Car phone
78 	Children
79 	Company main phone
80 	Department
81 	E-mail address
82 	E-mail2
83 	E-mail3
84 	E-mail list
85 	E-mail display name
86 	File as
87 	First name
88 	Full name
89 	Gender
90 	Given name
91 	Hobbies
92 	Home address
93 	Home city
94 	Home country/region
95 	Home P.O. box
96 	Home postal code
97 	Home state or province
98 	Home street
99 	Home fax
100	Home phone
101	IM addresses
102	Initials
103	Job title
104	Label
105	Last name
106	Mailing address
107	Middle name
108	Cell phone
109	Nickname
110	Office location
111	Other address
112	Other city
113	Other country/region
114	Other P.O. box
115	Other postal code
116	Other state or province
117	Other street
118	Pager
119	Personal title
120	City
121	Country/region
122	P.O. box
123	Postal code
124	State or province
125	Street
126	Primary e-mail
127	Primary phone
128	Profession
129	Spouse/Partner
130	Suffix
131	TTY/TTD phone
132	Telex
133	Webpage
134	Content status
135	Content type
136	Date acquired
137	Date archived
138	Date completed
139	Device category
140	Connected
141	Discovery method
142	Friendly name
143	Local computer
144	Manufacturer
145	Model
146	Paired
147	Classification
148	Status
149	Status
150	Client ID
151	Contributors
152	Content created
153	Last printed
154	Date last saved
155	Division
156	Document ID
157	Pages
158	Slides
159	Total editing time
160	Word count
161	Due date
162	End date
163	File count
164	File extension
165	Filename
166	File version
167	Flag color
168	Flag status
169	Space free
172	Group
173	Sharing type
174	Bit depth
175	Horizontal resolution
176	Width
177	Vertical resolution
178	Height
179	Importance
180	Is attachment
181	Is deleted
182	Encryption status
183	Has flag
184	Is completed
185	Incomplete
186	Read status
187	Shared
188	Creators
189	Date
190	Folder name
191	Folder path
192	Folder
193	Participants
194	Path
195	By location
196	Type
197	Contact names
198	Entry type
199	Language
200	Date visited
201	Description
202	Link status
203	Link target
204	URL
208	Media created
209	Date released
210	Encoded by
211	Episode number
212	Producers
213	Publisher
214	Season number
215	Subtitle
216	User web URL
217	Writers
219	Attachments
220	Bcc addresses
221	Bcc
222	Cc addresses
223	Cc
224	Conversation ID
225	Date received
226	Date sent
227	From addresses
228	From
229	Has attachments
230	Sender address
231	Sender name
232	Store
233	To addresses
234	To do title
235	To
236	Mileage
237	Album artist
238	Sort album artist
239	Album ID
240	Sort album
241	Sort contributing artists
242	Beats-per-minute
243	Composers
244	Sort composer
245	Disc
246	Initial key
247	Part of a compilation
248	Mood
249	Part of set
250	Period
251	Color
252	Parental rating
253	Parental rating reason
254	Space used
255	EXIF version
256	Event
257	Exposure bias
258	Exposure program
259	Exposure time
260	F-stop
261	Flash mode
262	Focal length
263	35mm focal length
264	ISO speed
265	Lens maker
266	Lens model
267	Light source
268	Max aperture
269	Metering mode
270	Orientation
271	People
272	Program mode
273	Saturation
274	Subject distance
275	White balance
276	Priority
277	Project
278	Channel number
279	Episode name
280	Closed captioning
281	Rerun
282	SAP
283	Broadcast date
284	Program description
285	Recording time
286	Station call sign
287	Station name
288	Summary
289	Snippets
290	Auto summary
291	Relevance
292	File ownership
293	Sensitivity
294	Shared with
295	Sharing status
297	Product name
298	Product version
299	Support link
300	Source
301	Start date
302	Sharing
303	Availability status
304	Status
305	Billing information
306	Complete
307	Task owner
308	Sort title
309	Total file size
310	Legal trademarks
311	Video compression
312	Directors
313	Data rate
314	Frame height
315	Frame rate
316	Frame width
317	Spherical
318	Stereo
319	Video orientation
320	Total bitrate

Edit:

I suggest using canonical names (Which are supposedly language neutral).

Code: Select all

#Warn
#SingleInstance, Force

imgFile := "D:\AhkScripts\AHK-004\LoadPictureEx\OIP.jpg"
SplitPath, imgFile, FileName, Dir
objShl := ComObjCreate("Shell.Application")
objDir := objShl.NameSpace(Dir)
objItm := objDir.ParseName(FileName)
 
MsgBox % objItm.ExtendedProperty("System.Image.HorizontalSize") . "x"
       . objItm.ExtendedProperty("System.Image.VerticalSize")
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Get the height / width of an image - to an array (object)

03 Oct 2020, 15:17

Thx SKAN :) that 'canonical way' makes sense, as long as I/we can remember all of its available names: https://docs.microsoft.com/de-de/windows/win32/properties/props :shh:
User avatar
SKAN
Posts: 1551
Joined: 29 Sep 2013, 16:58

Re: Get the height / width of an image - to an array (object)

03 Oct 2020, 15:57

BoBo wrote: 'canonical way' makes sense, as long as I/we can remember all of its available names
True :(
The list of canonical names is available @ Fileexpro()
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Get the height / width of an image - to an array (object)

04 Oct 2020, 18:40

How to extract a file's additional information that is listed under Win10's property details but isn't part of its standard properties index, bc it's an EXIF (eg. lat/long)??
@SKAN - I'd guess a conversion of the following would do the trick: https://gist.github.com/nissuk/1360596 ?? :think:
malcev
Posts: 1769
Joined: 12 Aug 2014, 12:37

Re: Get the height / width of an image - to an array (object)

05 Oct 2020, 15:37

Also You can generate list like this:

Code: Select all

DllCall("shell32\SHGetDesktopFolder", "ptr*", IShellFolder)
loop
{
   VarSetCapacity(SHELLDETAILS, 272, 0)
   if DllCall(NumGet(NumGet(IShellFolder+0)+18*A_PtrSize), "ptr", IShellFolder, "ptr", 0, "uint", A_Index-1, "ptr", &SHELLDETAILS)   ; GetDetailsOf
      break
   DllCall("Shlwapi\StrRetToStr", "ptr", &SHELLDETAILS+8, "ptr", 0, "ptr*", result)
   results .= A_Index-1 " - " StrGet(result) "`n"
   DllCall("ole32\CoTaskMemFree", "ptr", result)
}
msgbox % clipboard := results

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: Bing [Bot], peter_ahk, Pianist and 312 guests