GDI+ Bildergröße verändern: Finde den Fehler

  • Ich habe mir jetzt folgendes Script zusammengebastelt:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <GDIPlus.au3>
    If FileExists(@TempDir&"\PU_Folder.txt") Then
    $StandPath=FileRead(@TempDir&"\PU_Folder.txt")
    Else
    $StandPath=@UserProfileDir&"\"
    EndIf
    $AllFiles=FileOpenDialog("Picture Uploader",$StandPath,"Fotos (*.jpg)",5)
    ;--Bilder zu Arrays--
    If StringInStr($AllFiles,"|") Then
    ;Mehrere Dateien
    $File=StringSplit($AllFiles,"|")
    $Path=StringTrimRight(StringLeft($AllFiles,StringInStr($AllFiles,"|")),1)
    $NuOfFiles=_GetCharacterInStr($AllFiles,"|")
    Dim $FullFile[$NuOfFiles]
    For $i=0 To $NuOfFiles-1
    $FullFile[$i]=$Path&"\"&$File[$i+2]
    Next
    Else
    Dim $FullFile[1]
    $FullFile[0]=$AllFiles
    $NuOfFiles=1
    EndIf
    ;-Bilder in Temp-Ordner kopieren-
    ProgressOn("Picture Uploader","Dateien kopieren")
    ProgressSet(0)
    DirCreate(@TempDir&"\PictureUploader")
    For $i=1 To $NuOfFiles
    ProgressSet(100/$NuOfFiles*$i)
    FileCopy($FullFile[$i-1],@TempDir&"\PictureUploader\Pic_"&$i&".jpg",1)
    Next
    ProgressOff()
    ;-Bilder verkleinern-
    ProgressOn("Picture Uploader","Bilder verkleinern")
    ProgressSet(0)
    For $i=1 To $NuOfFiles
    ProgressSet(100/$NuOfFiles*$i)
    _GDIPlus_Startup()
    $image=_GDIPlus_ImageLoadFromFile("C:\Users\Conrad\AppData\Local\Temp\PictureUploader\Pic_6.jpg")
    $width=_GDIPlus_ImageGetWidth($image)
    $height=_GDIPlus_ImageGetHeight($image)
    $ZuWidth=$width*500/$height
    _GDIPlus_Shutdown()
    _ImageResize(@TempDir&"\PictureUploader\Pic_"&$i&".jpg",@TempDir&"\PictureUploader\Pic_"&$i&"_s.jpg",$ZuWidth,500)
    Next
    Func _ImageResize($sInImage, $sOutImage, $iW, $iH)
    Local $hWnd, $hDC, $hBMP, $hImage1, $hImage2, $hGraphic, $CLSID, $i = 0
    $hWnd = _WinAPI_GetDesktopWindow()
    $hDC = _WinAPI_GetDC($hWnd)
    $hBMP = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _GDIPlus_Startup()
    $hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
    $hImage2 = _GDIPlus_ImageLoadFromFile($sInImage)
    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage2, 0, 0, $iW, $iH)
    $CLSID = _GDIPlus_EncodersGetCLSID("JPG")
    _GDIPlus_ImageSaveToFileEx($hImage1, $sOutImage, $CLSID)
    _GDIPlus_ImageDispose($hImage1)
    _GDIPlus_ImageDispose($hImage2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _WinAPI_DeleteObject($hBMP)
    _GDIPlus_Shutdown()
    EndFunc ;==>_ImageResize
    ProgressOff()
    ;----------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetCharacterInStr($String, $Character)
    Local $Number = 0
    $Str = StringSplit($String, "")
    For $i = 1 To $Str[0]
    $StrComp = StringCompare($Str[$i], $Character, 2)
    If $StrComp = 0 Then
    $Number += 1
    EndIf
    Next
    Return $Number
    EndFunc

    [/autoit]


    Das funktioniert bei mir leider nicht. Die Bilder werden kopiert, aber anschließend nicht mehr verkleinert :pinch: . Komischerweise funktionierte das davor aber noch (ich habs mit Strg+Z zurückgesetzt). Könnt ihr mir sagen, was falsch ist oder wenigstens, ob das bei euch funzt?

    Greetz

    Rechtschreibfehler sind Spezialeffekte meiner Tastatur.

    Einmal editiert, zuletzt von owi dowi spinn (8. März 2010 um 21:16)

  • Hallo owi dowi spinn,

    das Bild dass du zur Grössenermittlung heranziehst existiert nicht (zumindest bei mir) dadurch werden ungültige Werte ermittelt. Abgeändertes Skript (läuft so bei mir):

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <GDIPlus.au3>
    If FileExists(@TempDir&"\PU_Folder.txt") Then
    $StandPath=FileRead(@TempDir&"\PU_Folder.txt")
    Else
    $StandPath=@UserProfileDir&"\"
    EndIf
    if not FileExists(@TempDir & "\PictureUploader") Then DirCreate(@TempDir & "\PictureUploader") ;<==============================

    [/autoit] [autoit][/autoit] [autoit]

    $AllFiles=FileOpenDialog("Picture Uploader",$StandPath,"Fotos (*.jpg)",5)
    ;--Bilder zu Arrays--
    If StringInStr($AllFiles,"|") Then
    ;Mehrere Dateien
    $File=StringSplit($AllFiles,"|")
    $Path=StringTrimRight(StringLeft($AllFiles,StringInStr($AllFiles,"|")),1)
    $NuOfFiles=_GetCharacterInStr($AllFiles,"|")
    Dim $FullFile[$NuOfFiles]
    For $i=0 To $NuOfFiles-1
    $FullFile[$i]=$Path&"\"&$File[$i+2]
    Next
    Else
    Dim $FullFile[1]
    $FullFile[0]=$AllFiles
    $NuOfFiles=1
    EndIf
    ;-Bilder in Temp-Ordner kopieren-
    ProgressOn("Picture Uploader","Dateien kopieren")
    ProgressSet(0)
    DirCreate(@TempDir&"\PictureUploader")
    For $i=1 To $NuOfFiles
    ProgressSet(100/$NuOfFiles*$i)
    FileCopy($FullFile[$i-1],@TempDir&"\PictureUploader\Pic_"&$i&".jpg",1)
    Next
    ProgressOff()
    ;-Bilder verkleinern-
    ProgressOn("Picture Uploader","Bilder verkleinern")
    ProgressSet(0)
    For $i=1 To $NuOfFiles
    ProgressSet(100/$NuOfFiles*$i)
    _GDIPlus_Startup()
    $image=_GDIPlus_ImageLoadFromFile(@TempDir&"\PictureUploader\Pic_"&$i&".jpg") ;<=================================== entscheidender Fehler
    $width=_GDIPlus_ImageGetWidth($image)
    $height=_GDIPlus_ImageGetHeight($image)
    $ZuWidth=$width*500/$height
    _GDIPlus_Shutdown()
    _ImageResize(@TempDir&"\PictureUploader\Pic_"&$i&".jpg",@TempDir&"\PictureUploader\Pic_"&$i&"_s.jpg",$ZuWidth, 500)
    Next
    Func _ImageResize($sInImage, $sOutImage, $iW, $iH)
    Local $hWnd, $hDC, $hBMP, $hImage1, $hImage2, $hGraphic, $CLSID, $i = 0
    $hWnd = _WinAPI_GetDesktopWindow()
    $hDC = _WinAPI_GetDC($hWnd)
    $hBMP = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _GDIPlus_Startup()
    $hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
    $hImage2 = _GDIPlus_ImageLoadFromFile($sInImage)
    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage2, 0, 0, $iW, $iH)
    $CLSID = _GDIPlus_EncodersGetCLSID("JPG")
    _GDIPlus_ImageSaveToFileEx($hImage1, $sOutImage, $CLSID)
    _GDIPlus_ImageDispose($hImage1)
    _GDIPlus_ImageDispose($hImage2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _WinAPI_DeleteObject($hBMP)
    _GDIPlus_Shutdown()
    EndFunc ;==>_ImageResize
    ProgressOff()
    ;----------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetCharacterInStr($String, $Character)
    Local $Number = 0
    $Str = StringSplit($String, "")
    For $i = 1 To $Str[0]
    $StrComp = StringCompare($Str[$i], $Character, 2)
    If $StrComp = 0 Then
    $Number += 1
    EndIf
    Next
    Return $Number
    EndFunc

    [/autoit]

    mfg (Auto)Bert