Hallöchen!
edit: Habe bereits selber die Lösung gefunden mehr oder weniger! Werde sie später posten! Muss allerdings erst noch etwas herumbasteln!
Sicherlich nicht ganz perfekt aber klappt schon so! Falls nicht ggf. mal mit der Tolleranz spielen, da diese ja in diesem Fall für alle Bilder gleich hoch wäre.
Spoiler anzeigen
#include<Array.au3>
#include <ImageSearch.au3>
HotKeySet("{ENTER}", "_StartSearch")
HotKeySet("{ESC}", "_Exit")
Local $ret = _GetFilesFolder_Rekursiv('.', 'bmp', 0, 0)
[/autoit] [autoit][/autoit] [autoit]If IsArray($ret) Then
$start = 1
EndIf
while 1
sleep(50)
WEnd
Func _StartSearch()
If IsDeclared("start") Then
$Bild_x1 = 0
$Bild_y1 = 0
$max = $ret[0]
$count = 1
While $count <= $max
$Bild = $ret[$count]
ConsoleWrite($Bild & @CRLF & $Bild & @CRLF)
$result = _ImageSearchArea($Bild, 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild_x1, $Bild_y1, 40)
ConsoleWrite($Bild_x1 & "-" & $Bild_y1 & @CRLF)
If $result = 1 Then
ConsoleWrite($Bild & " ist bereits in der Gallerie vorhanden!" & @CRLF & @CRLF)
Else
ConsoleWrite($Bild & " " & $count & " - Es wurde keine Übereinstimmung gefunden!" & @CRLF & @CRLF)
EndIf
$count +=1
WEnd
Else
EndIf
EndFunc
Func _Exit()
Exit
EndFunc
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
; Modified: oetzn
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc ;==>_GetFilesFolder_Rekursiv
Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
$aExt = StringSplit($Ext, "|", 2) ;von mir eingefügt
;_ArrayDisplay($aExt)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
For $i = 0 To UBound($aExt) - 1 ;von mir eingefügt
If StringRight($file.Name, StringLen($aExt[$i])) = $aExt[$i] Then _ ; $Ext in $Ext[$i] geändert
$strFiles &= $file.Path & $Delim
Next ;von mir eingefügt
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc ;==>_ShowSubFolders
Wäre es möglich ein ImageSearch-Script mit einem abgewandelten Script von Bugfix so zu kombinieren, das wenn z.B. Bilder die online in einer Bildergallerie sind und dieselben mit einem Bild im Offlinebetrieb übereinstimmen, mir eine MsgBox sagen würde..."Hey das Bild xyz ist bereits in der Gallerie vorhanden!"?
Die Bilder müssen aber online NICHT zwangsläufig die selben Namen haben, da im Offlinebetrieb auch Bilder von unterschiedlichen Kameras sind und die haben dann teilweise so automatisch erstellte Namen.
hier eine leicht abgewandelte Version von dem Script von Bugfix (funktioniert auch):
Spoiler anzeigen
#include<Array.au3>
[/autoit] [autoit][/autoit] [autoit]$ret = _GetFilesFolder_Rekursiv('.', 'bmp|png',0,1)
If IsArray($ret) Then
_ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
Else
ConsoleWrite($ret & @CRLF)
EndIf
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
; Modified: oetzn
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc ;==>_GetFilesFolder_Rekursiv
Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
$aExt = StringSplit($Ext, "|", 2) ;von mir eingefügt
;~ _ArrayDisplay($aExt)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
For $i = 0 To UBound($aExt) - 1 ;von mir eingefügt
If StringRight($file.Name, StringLen($aExt[$i])) = $aExt[$i] Then _ ; $Ext in $Ext[$i] geändert
$strFiles &= $file.Path & $Delim
Next ;von mir eingefügt
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc ;==>_ShowSubFolders
hier mal nen relativ smples ImageSearch-Scrip (funktioniert auch soweit!):
Spoiler anzeigen
#include <ImageSearch.au3>
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ENTER}", "_StartSearch")
HotKeySet("{ESC}", "_Exit")
$Bild1x1 = 0
$Bild1y1 = 0
$Bild = "Testbild.bmp"
[/autoit] [autoit][/autoit] [autoit]while 1
sleep(50)
WEnd
Func _StartSearch()
$result1 = _ImageSearchArea($Bild,1,0,0,@DesktopWidth,@DesktopHeight,$Bild1x1,$Bild1y1,0)
If $result1 = 1 Then
ConsoleWrite($result1 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _Exit()
Exit
EndFunc
Meine Frage jetzt wäre, wie bekomme ich es hin das er mir jedes gefundene *.bmp oder auch *.png in die Variable $Bild einfügt und erstmal überprüft ob das Bild vorhanden ist...und danach dann das nächste Bild vom Offlinemodus nimmt und ebenfalls dann wieder überprüft und so weiter?
Hab da selber schon ein wenig herumgespielt aber bekomme es iwie nicht ganz hin. Vllt ist ja hier wer nen bischen "heller" als ich.
Im Prinzip spuckt mir das Script von Bugfix ja schon nahe zu alles aus, was ich brauche. Allerdings weiss ich nicht, wie ich z.B. die Gesammtanzahl seperat speichern kann (wieviele Treffer er gefunden hat) und auch nicht wie ich auf einzelne Treffer zugreifen kann (als Array wäre nett, da man das ganze dann einfach in einer Schleife stecken könnte).
edit: Und was jetzt nichts direkt mit dem Thema zu tun hat...bzw ich bin mir da nicht so ganz sicher ob oder eben ob nicht.
Hatte iwo was davon gelesen das man Bilder auszulesen kann und in Strings speichern kann?!
Hat da wer Ahnung von...falls ja wisste ihr vllt Seiten wo ich etwas dazu lesen kann?
Weil auch wenn es nix mit dem Thema zu tun hat finde ich hört sich das einfach interessant an. hahahaha
edit2: Da gäb es dann sicher auch noch möglichkeiten z.B. Bilder auf Teil-Übereinstimmungen zu überprüfen oder? Und noch einiges mehr würde mir da einfallen..auch wenn es mir gerade eigentlich nix nutzen würde, aber wäre doch auch denkbar zu überprüfen, welches Bild z.B. ein Original und welches eine Kopie ist usw. oder?!