Jump to content

mikeytown2

Active Members
  • Posts

    211
  • Joined

  • Last visited

Everything posted by mikeytown2

  1. Something I threw together. Uses these exe's http://mozjpeg.codelove.de/binaries.html http://www.sentex.net/~mwandel/jhead/ Will auto rotate the image and keep the original exif data. I use this to compress photos before putting them in email or dropbox. Will use the number of cores your box has for processing the images so it can plow though them fairly quickly. #include <Array.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <GUIConstantsEx.au3> #include <Crypt.au3> FileInstall('cjpeg.exe', @ScriptDir & '\cjpeg.exe') FileInstall('libjpeg-62.dll', @ScriptDir & '\libjpeg-62.dll') FileInstall('jhead.exe', @ScriptDir & '\jhead.exe') FileInstall('jpegtran.exe', @ScriptDir & '\jpegtran.exe') ;add to array, list of files in a dir Func FileListFromDir($dir, $filetype, ByRef $filelist) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then $searchDIR = FileFindFirstFile($dir & "\*") While 1 $file = FileFindNextFile($searchDIR) If @error Then ExitLoop EndIf If StringInStr(FileGetAttrib($dir & "\" & $file), "D") Then FileListFromDir($dir & "\" & $file, $filetype, $filelist) EndIf WEnd FileClose($searchDIR) ; Close the search handle EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir ;add from given array to Filelist Func GetListOfFiles() Local $dirbit = 0 Local $filetype = '*.jpg' Local $filelist[1] $filelist[0] = 0 ;Grab EXE Drag-n-Droped files/dir's If $CmdLine[0] > 0 Then For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x], $filetype, $filelist) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndIf If $filelist[0] <= 0 Then ; Create a constant variable in Local scope of the message to display in FileOpenDialog. Local Const $sMessage = "Hold down Ctrl or Shift to choose multiple files." ; Display an open dialog to select a list of file(s). Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "JPG Files (*.jpg)", $FD_FILEMUSTEXIST + $FD_MULTISELECT) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.") ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) Else ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) If StringInStr($sFileOpenDialog, '|') Then $templist = StringSplit($sFileOpenDialog, '|') $dir = $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 While $templist[0] > 0 $newfile = $dir & '\' & $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 _ArrayAdd($filelist, $newfile) $filelist[0] += 1 WEnd Else _ArrayAdd($filelist, $sFileOpenDialog) $filelist[0] += 1 EndIf EndIf EndIf Return $filelist EndFunc ;==>ArrayToFileList Func shrinkjpeg($filename, $pids) ; Get dir and filename info. Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "" Local $aPathSplit = _PathSplit($filename, $sDrive, $sDir, $sFilename, $sExtension) Local $sNewDir = $sDrive & $sDir & 'small\' If DirGetSize($sNewDir) == -1 Then DirCreate($sNewDir) EndIf ; Run X number of threads. $cores = EnvGet("NUMBER_OF_PROCESSORS") While $pids[0] > $cores For $x = 1 To $cores Step +1 If _elementExists($pids, $x) And ProcessExists($pids[$x]) == 0 Then _ArrayDelete($pids, $x) $pids[0] -= 1 EndIf Next Sleep(20) WEnd ; Let GUI know what file is being worked on. OutputStatus($sFilename) $newfilename = $sNewDir & $sFilename & '-small.jpg' Local $cmds = '' $cmds &= @ComSpec & ' /c ' ; run mozjpeg. $cmds &= '' & @ScriptDir & '\cjpeg.exe -quality 60,51 -optimize "' & $filename & '" > "' & $newfilename & '"' ; Copy exif data. $cmds &= ' & ' & @ScriptDir & '\jhead.exe -te "' & $filename & '" "' & $newfilename & '"' ; Rotate jpeg. $cmds &= ' & ' & @ScriptDir & '\jhead.exe -autorot "' & $newfilename & '"' ; Run it. Local $iPID = Run($cmds, "", @SW_HIDE) ; Set priority low. ProcessSetPriority($iPID, 0) _ArrayAdd($pids, $iPID) $pids[0] += 1 Return $pids EndFunc Func OutputStatus($sMessage) Local $hWnd = WinGetHandle("") TrayTip('Status:', $sMessage, 30) TraySetToolTip($sMessage) WinActivate($hWnd) EndFunc Func _elementExists($array, $element) If $element > UBound($array)-1 Then Return False ; element is out of the array bounds Return True ; element is in array bounds EndFunc $files = GetListOfFiles() Local $pids[1] $pids[0] = 0 If $files[0] > 0 Then While $files[0] > 0 $pids = shrinkjpeg($files[1], $pids) _ArrayDelete($files, 1) $files[0] -= 1 WEnd $cores = EnvGet("NUMBER_OF_PROCESSORS") If $pids[0] > $cores Then For $x = 1 To $cores Step +1 If _elementExists($pids, $x) Then ProcessWaitClose($pids[$x]) EndIf Next EndIf MsgBox($MB_SYSTEMMODAL, "", "Done") EndIf
  2. avs to m4v script #include <Array.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <File.au3> ;add to array, list of files in a dir Func FileListFromDir($dir, $filetype, ByRef $filelist) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then $searchDIR = FileFindFirstFile($dir & "\*") While 1 $file = FileFindNextFile($searchDIR) If @error Then ExitLoop EndIf If StringInStr(FileGetAttrib($dir & "\" & $file), "D") Then FileListFromDir($dir & "\" & $file, $filetype, $filelist) EndIf WEnd FileClose($searchDIR) ; Close the search handle EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir ;add from given array to Filelist Func GetListOfFiles() Local $dirbit = 0 Local $filetype = '*.avs' Local $filelist[1] $filelist[0] = 0 ;Grab EXE Drag-n-Droped files/dir's If $CmdLine[0] > 0 Then For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x], $filetype, $filelist) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndIf If $filelist[0] <= 0 Then ; Create a constant variable in Local scope of the message to display in FileOpenDialog. Local Const $sMessage = "Hold down Ctrl or Shift to choose multiple files." ; Display an open dialog to select a list of file(s). Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "AVS Files (*.avs)", $FD_FILEMUSTEXIST + $FD_MULTISELECT) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.") ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) Else ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) If StringInStr($sFileOpenDialog, '|') Then $templist = StringSplit($sFileOpenDialog, '|') $dir = $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 While $templist[0] > 0 $newfile = $dir & '\' & $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 _ArrayAdd($filelist, $newfile) $filelist[0] += 1 WEnd Else _ArrayAdd($filelist, $sFileOpenDialog) $filelist[0] += 1 EndIf EndIf EndIf Return $filelist EndFunc ;==>ArrayToFileList Func QueueFile($sFileName) Opt("WinTitleMatchMode", 1) Local $hMeGUI = WinActivate("MeGUI ") BlockInput(1) Send("{CTRLDOWN}o{CTRLUP}") BlockInput(0) Local $hWnd = WinWaitActive("Select your input file") Sleep(500) Opt("SendKeyDelay", 0) BlockInput(1) ControlSend($hWnd, "", "Edit1", $sFileName & "{ENTER}") BlockInput(0) Opt("SendKeyDelay", 5) $hWnd = WinWaitActive("Current position:") Sleep(500) BlockInput(1) ControlSend($hWnd, "", "[NAME:showPAR]", "{SPACE}") BlockInput(0) Sleep(500) BlockInput(1) ControlSend($hWnd, "", "[NAME:dropDownButton]", "{SPACE}") Opt("SendKeyDelay", 50) Send("1{ENTER}") Opt("SendKeyDelay", 5) BlockInput(0) WinClose($hWnd) Sleep(500) WinWaitActive($hMeGUI) Local $aPos = MouseGetPos() Opt("MouseCoordMode", 0) BlockInput(1) MouseClick("left", 30, 50, 1, 0) BlockInput(0) Opt("MouseCoordMode", 1) MouseMove($aPos[0], $aPos[1], 0) Sleep(500) BlockInput(1) ControlClick($hMeGUI, "", "[NAME:autoEncodeButton]", "left", 1) BlockInput(0) Sleep(500) $hWnd = WinWaitActive("MeGUI - Automatic Encoding") Sleep(500) BlockInput(1) ControlClick($hWnd, "", "[NAME:addSubsNChapters]", "left", 1) BlockInput(0) Sleep(500) BlockInput(1) ControlClick($hWnd, "", "[NAME:queueButton]", "left", 1) BlockInput(0) Sleep(5000) EndFunc $files = GetListOfFiles() While $files[0] > 0 QueueFile($files[1]) _ArrayDelete($files, 1) $files[0] -= 1 WEnd MsgBox($MB_SYSTEMMODAL, "", "Done")
  3. Needed a way to automate ripping mutiple .iso DVDs and I came up with this. Uses VirtualCloneDrive to mount the iso file. Uses PgcDemux to do the actual ripping. Uses DGIndex to index the m2v. And finally writes a avs file for input into MeGUI. Not perfect but gets the job done #include <Array.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <GUIConstantsEx.au3> Global $sINI = @ScriptDir & '\iso_to_avs.ini' ;add to array, list of files in a dir Func FileListFromDir($dir, $filetype, ByRef $filelist) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then $searchDIR = FileFindFirstFile($dir & "\*") While 1 $file = FileFindNextFile($searchDIR) If @error Then ExitLoop EndIf If StringInStr(FileGetAttrib($dir & "\" & $file), "D") Then FileListFromDir($dir & "\" & $file, $filetype, $filelist) EndIf WEnd FileClose($searchDIR) ; Close the search handle EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir ;add from given array to Filelist Func GetListOfFiles() Local $dirbit = 0 Local $filetype = '*.iso' Local $filelist[1] $filelist[0] = 0 ;Grab EXE Drag-n-Droped files/dir's If $CmdLine[0] > 0 Then For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x], $filetype, $filelist) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndIf If $filelist[0] <= 0 Then ; Create a constant variable in Local scope of the message to display in FileOpenDialog. Local Const $sMessage = "Hold down Ctrl or Shift to choose multiple files." ; Display an open dialog to select a list of file(s). Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "ISO Files (*.iso)", $FD_FILEMUSTEXIST + $FD_MULTISELECT) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.") ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) Else ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) If StringInStr($sFileOpenDialog, '|') Then $templist = StringSplit($sFileOpenDialog, '|') $dir = $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 While $templist[0] > 0 $newfile = $dir & '\' & $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 _ArrayAdd($filelist, $newfile) $filelist[0] += 1 WEnd Else _ArrayAdd($filelist, $sFileOpenDialog) $filelist[0] += 1 EndIf EndIf EndIf Return $filelist EndFunc ;==>ArrayToFileList Func LoadISO($filename) Local $cmd = IniRead($sINI, 'FileLocations', 'vcdmount', @ProgramFilesDir & ' (x86)\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe') RunWait(@ComSpec & " /c " & '"' & $cmd & '"' & ' /d=0 /u', "", @SW_HIDE) ShellExecuteWait($cmd, ' /d=0 ' & '"' & $filename & '"') Send("{SHIFTDOWN}") GUISetCursor(15) OutputStatus("Waiting for the DVD to load:" & @CRLF & $filename & @CRLF & "DO NOT PRESS THE SHIFT KEY") WinWait("AutoPlay","", 15) WinClose("AutoPlay") OutputStatus("") Send("{SHIFTUP}") EndFunc Func RipDVD($isoName) Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "" Local $aPathSplit = _PathSplit($isoName, $sDrive, $sDir, $sFilename, $sExtension) Local $dest = IniRead($sINI, 'FileLocations', 'destdir', 'D:\Users\admin\Videos\Rips\Auto\') & $sFilename DirCreate($dest) Local $cmd = IniRead($sINI, 'FileLocations', 'pgcdemux', 'D:\Users\admin\Desktop\New folder\PgcDemuxMod.exe') Local $cddrive = IniRead($sINI, 'FileLocations', 'cddrive', 'G:\') Local $filelist[1] $filelist[0] = 0 FileListFromDir($cddrive & 'VIDEO_TS', 'VTS*.IFO', $filelist) Local $counter = 1 While $filelist[0] > 0 $iPreviousFileSize = 0 For $x = 1 To 99 Step +1 OutputStatus('') If Not FileExists($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v') Then DirCreate($dest & '\' & $counter & '-' & $x) Local $iPID = Run(@ComSpec & " /c " & '"' & $cmd & '"' & ' -pgc ' & $x & ' -m2v ' & $filelist[1] & ' ' & $dest & '\' & $counter & '-' & $x & '', "", @SW_HIDE) OutputStatus($counter & '-' & $x & ':m2v') ProcessWaitClose($iPID) Local $sOutput = StdoutRead($iPID) ; Remove dir if an error code was returned. If $sOutput <> 0 Then DirRemove($dest & '\' & $counter & '-' & $x) ExitLoop EndIf ; Remove dir if no video file was made. If Not FileExists($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v') Then DirRemove($dest & '\' & $counter & '-' & $x) ExitLoop EndIf EndIf OutputStatus($counter & '-' & $x & ':checking') ; Remove dir if no audio file was made. If Not FileExists($dest & '\' & $counter & '-' & $x & '\AudioFile_80.ac3') Then DirRemove($dest & '\' & $counter & '-' & $x, 1) EndIf Local $iFileSize = FileGetSize($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v') ; Remove dir if video file is smaller than 5MB. If $iFileSize < 5242880 Then DirRemove($dest & '\' & $counter & '-' & $x, 1) EndIf ; Remove dir if video file is the same as the last one. If $iPreviousFileSize == $iFileSize Then $this = _Crypt_HashFile($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v', $CALG_MD5) $prev = _Crypt_HashFile($dest & '\' & $counter & '-' & ($x-1) & '\VideoFile.m2v', $CALG_MD5) ;MsgBox($MB_SYSTEMMODAL, "", StringCompare($this, $prev) & @CRLF & $this & @CRLF & $prev & @CRLF & $iPreviousFileSize & @CRLF & $iFileSize & @CRLF & $dest & '\' & $counter & '-' & $x & '\VideoFile.m2v' & @CRLF & $dest & '\' & $counter & '-' & ($x-1) & '\VideoFile.m2v') If StringCompare($this, $prev) == 0 Then DirRemove($dest & '\' & $counter & '-' & $x, 1) EndIf EndIf $iPreviousFileSize = $iFileSize IndexVideo($dest & '\' & $counter & '-' & $x, $counter & '-' & $x) MakeAviSynthFile($dest, $counter & '-' & $x) Next OutputStatus('') $counter += 1 _ArrayDelete($filelist, 1) $filelist[0] -= 1 WEnd EndFunc Func IndexVideo($dir, $small_dir) If FileExists($dir & '\VideoFile.m2v') Then If Not FileExists($dir & '\VideoFile.d2v') Then Local $cmd = '"' & IniRead($sINI, 'FileLocations', 'dgindex', @ProgramFilesDir & ' (x86)\AviSynth 2.5\tools\dgmpegdec\DGIndex.exe') & '" -IF=[' & $dir & '\VideoFile.m2v] -OF=[' & $dir & '\VideoFile] -HIDE -EXIT' OutputStatus($small_dir & ':d2v') RunWait(@ComSpec & " /c " & $cmd, "", @SW_HIDE) OutputStatus('') EndIf EndIf EndFunc Func MakeAviSynthFile($dest, $small_dir) $sDestFile = $dest & '\' & $small_dir & '.avs' If Not FileExists($dest & '\' & $small_dir & '\VideoFile.d2v') Then If FileExists($sDestFile) Then FileDelete($sDestFile) EndIf ElseIf Not FileExists($sDestFile) Then Local $sFileContents = '' $sFileContents &= 'v = MPEG2Source("' & $small_dir & '\VideoFile.d2v", cpu=2)' & @CRLF $sFileContents &= 'a = NicAC3Source("' & $small_dir & '\AudioFile_80.ac3", 2)' & @CRLF $sFileContents &= 'audiodubex(v, a)' & @CRLF $sFileContents &= '#QTGMC(Preset="draft", NoisePreset="Slow")' & @CRLF $sFileContents &= 'QTGMC(Preset="Medium", NoisePreset="Slow")' & @CRLF $sFileContents &= 'SelectEven()' & @CRLF $sFileContents &= 'TDecimate()' & @CRLF FileWrite($sDestFile, $sFileContents) EndIf EndFunc Func OutputStatus($sMessage) Local $hWnd = WinGetHandle("") TrayTip('Status:', $sMessage, 30) TraySetToolTip($sMessage) WinActivate($hWnd) EndFunc $files = GetListOfFiles() While $files[0] > 0 LoadISO($files[1]) RipDVD($files[1]) _ArrayDelete($files, 1) $files[0] -= 1 WEnd MsgBox($MB_SYSTEMMODAL, "", "Done") Example INI file
  4. Uses the latest (as of May 8th, 2011) version of ImageMagick. Has a slow mode (press no) which then uses this algorithm: smart sharpening in imagemagick #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=blue.ico #AutoIt3Wrapper_Outfile=image.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_Res_Language=1033 #AutoIt3Wrapper_Add_Constants=n #AutoIt3Wrapper_Run_Tidy=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.0.0 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <Array.au3> ; Basic ImageMagick Vars Global $ret = 0 Global $info Global $msgs Global $elem Global $sMsgs Global Const $ERROR_SUCCESS = 0 ; ImageMagick Error handler ChkImageMagickInstall() Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") Global $img = ObjCreate("ImageMagickObject.MagickImage.1") ;Autoit Variables Global $filelist[1] $filelist[0] = 0 Global $filetype = "*.jpg" Global $OutDir = @DesktopDir & "\" & @YEAR & "-" & @MON Global $mode = 6 ChkCmd() If $filelist[0] > 0 Then $mode = MsgBox(4, "Quality/Speed Selection", "Press Yes for speed, No for High quality mode (over 10 times slower).") ProcessImages() Else MsgBox(0x40000, "Error", "No Picture " & $filetype & " files found") EndIf ; Install Imagemagick Func ChkImageMagickInstall() If DirGetSize(@ProgramFilesDir & "\ImageMagick-6.6.9-Q16") == -1 Then ToolTip("Installing Image Processing Tools") FileInstall("ImageMagick-6.6.9-8-Q16-windows-dll.exe", "install.exe") RunWait("install.exe" & " /VERYSILENT" & ' /COMPONENTS="install_magick_dll"') ToolTip("Tools Installed") Sleep(1000) FileInstall("ImageMagickObject.dll", @ProgramFilesDir & "\ImageMagick-6.6.9-Q16\ImageMagickObject.dll") FileInstall("MagickCMD.exe", @ProgramFilesDir & "\MagickCMD.exe") RunWait(@ComSpec & " /c " & 'Regsvr32 /s "' & @ProgramFilesDir & '\ImageMagick-6.6.9-Q16\ImageMagickObject.dll"', "", @SW_HIDE) Sleep(1000) ToolTip("") EndIf EndFunc ;==>ChkImageMagickInstall ;Grab EXE Drag-n-Droped files/dir's Func ChkCmd() ;Files where dropped onto exe If $CmdLine[0] > 0 Then ArrayToFileList($CmdLine) Else $folder = FileSelectFolder("Choose The Folder That Contains All The Images.", "") If @error Then Return '' EndIf FileListFromDir($folder) EndIf EndFunc ;==>ChkCmd ;add from given array to Filelist Func ArrayToFileList($CmdLine) Local $dirbit = 0 For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x]) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndFunc ;==>ArrayToFileList ;add to array, list of files in a dir Func FileListFromDir($dir) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then $searchDIR = FileFindFirstFile($dir & "\*") While 1 $file = FileFindNextFile($searchDIR) If @error Then ExitLoop EndIf If StringInStr(FileGetAttrib($dir & "\" & $file), "D") Then FileListFromDir($dir & "\" & $file) EndIf WEnd FileClose($searchDIR) ; Close the search handle EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir Func ProcessImages() ProgressOn("Image Processor", "Total of " & $filelist[0] & " images loaded for processing", "", "", "", 16) DirCreate($OutDir) While DirGetSize($OutDir) == -1 Sleep(250) WEnd Sleep(250) $step = 100 / $filelist[0] $increment = $step $counter = 0 While $filelist[0] > 0 Local $filein = $filelist[1] Local $fileout = ChangeOutputDir($filelist[1]) ProgressSet($increment, Round($increment) & " percent. " & $counter & " files done.") If $mode == 6 Then $out = _ImageMagick_Quality($filein, "70", $fileout) Else $out = _ImageMagick_Sharpen($filein, $fileout) EndIf ConsoleWrite($out) If @error Then ExitLoop _ArrayDelete($filelist, 1) $filelist[0] -= 1 $increment += $step $counter += 1 WEnd ProgressSet(100, "Done", "Complete") ShellExecute($OutDir) Sleep(500) ProgressOff() EndFunc ;==>ProcessImages ; Error event Func MyErrFunc() $HexNumber = Hex($oMyError.number, 8) MsgBox(0, "ImageMagick Error", "There was an ImageMagick error!" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) SetError(1) ; to check for after this function returns EndFunc ;==>MyErrFunc Func _ImageMagick_Sharpen($sInFile, $sOutFile) $sharp_radius = 5 $sharp_sigma = Sqrt($sharp_radius) $sharp_amount = 1.2 $sharp_threshold = 0.003 $a1 = 0 $b1 = 0 $c1 = 1.2 $d1 = -0.1 $blur_radius = 3 $blur_sigma = Sqrt($blur_radius) $edge_width = 2 $clip_low = "40" ;percentage left totally untouched by the sharpening $clip_high = "1" ;percentage sharpened full strength $img.Convert($sInFile, _ "-auto-orient", _ "-resize", "3145732@\>", _ "-quality", "00", _ $sOutFile & ".png") ;first make the edges $img.Convert($sOutFile & ".png", _ "-edge", $edge_width, " ", _ "-colorspace", "Gray ", _ "-quality", "00", _ $sOutFile & "_inner_edges.png") $img.Convert($sOutFile & ".png", _ "-negate", " ", _ "-edge", $edge_width, " ", _ "-colorspace", "Gray ", _ "-quality", "00", _ $sOutFile & "_outer_edges.png") $img.Composite("-compose", "plus", _ $sOutFile & "_inner_edges.png", _ $sOutFile & "_outer_edges.png", _ "-quality", "00", _ $sOutFile & "_added_edges.png") $img.Convert($sOutFile & "_added_edges.png", _ "-gaussian-blur", $blur_radius & "x" & $blur_sigma, _ "-quality", "00", _ $sOutFile & "_edges_blurred.png") $ret = $img.Convert($sOutFile & "_edges_blurred.png", _ "-linear-stretch", $clip_low & "%x" & $clip_high, _ "-quality", "00", _ $sOutFile & "_edges.png") ;then get the value channel and sharpen it $img.Convert($sOutFile & ".png", _ "-colorspace", "HSB", " ", _ "-channel", "B", " ", _ "-separate", " ", _ "-quality", "00", _ $sOutFile & "_value.png") $img.Convert($sOutFile & "_value.png", _ "-unsharp", $sharp_radius & "x" & $sharp_sigma & "+" & $sharp_amount & "+" & $sharp_threshold, " ", _ "-quality", "00", _ $sOutFile & "_value_8.png") $img.Composite($sOutFile & "_value_8.png", _ $sOutFile & "_value.png", _ $sOutFile & "_edges.png", _ "-quality", "00", _ $sOutFile & "_value_partial_sharp.png") ;then get the hue and saturation channels $img.Convert($sOutFile & ".png", _ "-colorspace", "HSB", " ", _ "-channel", "R", " ", _ "-separate", " ", _ "-quality", "00", _ $sOutFile & "_hue.png") $img.Convert($sOutFile & ".png", _ "-colorspace", "HSB", " ", _ "-channel", "G", " ", _ "-separate", " ", _ "-quality", "00", _ $sOutFile & "_saturation.png") FileDelete($sOutFile & "_inner_edges.png") FileDelete($sOutFile & "_outer_edges.png") FileDelete($sOutFile & "_added_edges.png") FileDelete($sOutFile & "_edges_blurred.png") FileDelete($sOutFile & "_edges.png") FileDelete($sOutFile & "_value.png") FileDelete($sOutFile & "_value_8.png") FileDelete($sOutFile & ".png") ;finally put it all together $img.Convert($sOutFile & "_hue.png", "-colorspace", "HSB", _ $sOutFile & "_hue.png", "-compose", "CopyRed", "-composite", _ $sOutFile & "_saturation.png", "-compose", "CopyGreen", "-composite", _ $sOutFile & "_value_partial_sharp.png", "-compose", "CopyBlue", "-composite", _ "-colorspace", "RGB", _ "-quality", "00", _ $sOutFile & "_smartsharp.png") ;auto level $ret = $img.Convert($sOutFile & "_smartsharp.png", _ "-auto-level", _ "-quality", "00", _ $sOutFile & ".png") ;compress to jpeg $ret = $img.Convert($sOutFile & ".png", _ "-quality", "70", _ "-contrast-stretch", "1.5%x2%", _ $sOutFile) FileDelete($sOutFile & ".png") FileDelete($sOutFile & "_hue.png") FileDelete($sOutFile & "_saturation.png") FileDelete($sOutFile & "_value_partial_sharp.png") FileDelete($sOutFile & "_smartsharp.png") Return $ret EndFunc ;==>_ImageMagick_Sharpen Func _ImageMagick_Quality($sInFile, $sQuality, $sOutFile) $ret = $img.Convert($sInFile, _ "-auto-level", _ "-auto-orient", " ", _ "-contrast-stretch", "1.5%x2%", _ "-resize", "3145732@\>", _ "-quality", $sQuality, _ $sOutFile) Return $ret EndFunc ;==>_ImageMagick_Quality ;change string to output dir right before it goes to HCenc.exe Func ChangeOutputDir($fileout) Local $temp = StringSplit($fileout, "\") $fileout = $OutDir & "\" & $temp[$temp[0]] Return $fileout EndFunc ;==>ChangeOutputDir
  5. Got it working again, let me know if you have any more issues
  6. Updated the 2nd post with the newest version of POP
  7. Gmail's pop server no longer takes the NOOP if your not logged in... I need to rewrite the udf, give me a couple of hrs/days.
  8. It's an OpenSSL problem Run the test command from ptrex, and let me know what it says http://www.autoitscript.com/forum/index.ph...st&p=592662
  9. As of right now, no.
  10. Auto install ImageMagick if it's not there. Auto rotate image baised on EXIF data. Auto brightens dark areas Auto resize shrinks to typical 3MP image Recompresses jpg files to 70% quality for web use. Dumps processed files in a dir on the desktop. Grabed Code From my batch m2v maker http://www.autoitscript.com/forum/index.php?showtopic=58691 and the ImageMagick Object http://www.autoitscript.com/forum/index.php?showtopic=49065 #include <Array.au3> ; Basic ImageMagick Vars Global $ret = 0 Global $info Global $msgs Global $elem Global $sMsgs Global Const $ERROR_SUCCESS = 0 ChkImageMagickInstall() ; ImageMagick Error handler Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") Global $img = ObjCreate("ImageMagickObject.MagickImage.1") ;Autoit Variables Global $filelist[1] $filelist[0] = 0 Global $filetype = "*.jpg" Global $OutDir = @DesktopDir & "\" & @YEAR & "-" & @MON ChkCmd() ProcessImages() ; Install Imagemagick Func ChkImageMagickInstall() If DirGetSize(@ProgramFilesDir & "\ImageMagick-6.4.7-Q16") == -1 Then ToolTip("Installing Image Processing Tools") FileInstall("ImageMagick-6.4.7-6-Q16-windows-dll.exe", "install.exe") RunWait("install.exe" & " /VERYSILENT" & ' /COMPONENTS="install_magick_dll"') ToolTip("Tools Installed") FileInstall("ImageMagickObject.dll", @ProgramFilesDir & "\ImageMagick-6.4.7-Q16\ImageMagickObject.dll") FileInstall("MagickCMD.exe", @ProgramFilesDir & "\MagickCMD.exe") Sleep(1000) RunWait(@ComSpec & " /c " & 'Regsvr32 /s "' & @ProgramFilesDir & '\ImageMagick-6.4.7-Q16\ImageMagickObject.dll"', "", @SW_HIDE) Sleep(1000) ToolTip("") EndIf EndFunc ;Grab EXE Drag-n-Droped files/dir's Func ChkCmd() ;Files where dropped onto exe If $CmdLine[0] > 0 Then ArrayToFileList($CmdLine) EndIf EndFunc ;==>ChkCmd ;add from given array to Filelist Func ArrayToFileList($CmdLine) Local $dirbit = 0 For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x]) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndFunc ;==>ArrayToFileList ;add to array, list of files in a dir Func FileListFromDir($dir) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then MsgBox(0x40000, "Error", "No Picture " & $filetype & " files found") EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir Func ProcessImages() ProgressOn("Image Processor", "Total of " & $filelist[0] & " images loaded for processing") DirCreate($OutDir) While DirGetSize($OutDir) == -1 Sleep(250) WEnd Sleep(250) $step = 100 / $filelist[0] $increment = $step While $filelist[0] > 0 Local $filein = $filelist[1] Local $fileout = ChangeOutputDir($filelist[1]) ProgressSet($increment, Round($increment) & " percent") _ImageMagick_Quality($filein, "70", $fileout) If @error Then ExitLoop _ArrayDelete($filelist, 1) $filelist[0] -= 1 $increment += $step WEnd ProgressSet(100 , "Done", "Complete") ShellExecute($OutDir) Sleep(500) ProgressOff() EndFunc ; Error event Func MyErrFunc() $HexNumber=hex($oMyError.number,8) Msgbox(0,"ImageMagick Error", "There was an ImageMagick error!" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) SetError(1) ; to check for after this function returns EndFunc Func _ImageMagick_Quality($sInFile, $sQuality, $sOutFile) $ret = $img.Convert($sInFile, _ "-auto-orient", " ", _ "-quality",$sQuality, _ "-sigmoidal-contrast", "2,0%", _ "-filter","Lagrange", _ "-resize","2048x2048>", _ $sOutFile) Return $ret EndFunc ;change string to output dir right before it goes to HCenc.exe Func ChangeOutputDir($fileout) Local $temp = StringSplit($fileout, "\") $fileout = $OutDir & "\" & $temp[$temp[0]] Return $fileout EndFunc Edit 12-12-2008: Using -sigmoidal-contrast for image brightness Added in Resize
  11. ditto, why do they disappear after 3 days? It's a moron move in my opinion. It makes supporting some of the functions that I wrote quite hard.
  12. It's because it's marking that email as read. I should probably have a PeekMessage() function. I'll be gone till mid December so if anyone wants to code it, do it, otherwise I'll pick this up in 3-4 weeks. The bank account would best be handled by something like the IE functions. Using OpenSSL to do it, although possible, is kinda nuts.
  13. I think a wrapper for these functions would be helpful... here's my untested take on it Func WinHttpWrapper($URL, $Type, $Data = "", $username = "", $password = "", $protocall = "HTTP/1.1") $temp = SplitURL($URL) $Server = $temp[0] $Address = $temp[1] $hw_open = _WinHttpOpen("WinHTTP Example") $hw_connect = _WinHttpConnect($hw_open, $Server) $h_openRequest = _WinHttpOpenRequest($hw_connect, $Type, $Address, $protocall) _WinHttpSetCredentials($h_openRequest, $WINHTTP_AUTH_TARGET_SERVER, $WINHTTP_AUTH_SCHEME_BASIC, $username, $password) _WinHttpSendRequest($h_openRequest) _WinHttpWriteData($h_openRequest, $Data) $Response = _WinHttpReceiveResponse($h_openRequest) _WinHttpCloseHandle($h_openRequest) _WinHttpCloseHandle($hw_connect) _WinHttpCloseHandle($hw_open) Return $Response EndFunc Func SplitURL($URL) Dim $array[2] $split = SplitURLHelper($URL, 3) If $split == 0 Then $split = SplitURLHelper($URL, 2) $URL = StringRight($URL, $split) $array[0] = $URL Return $array EndIf $left = StringLeft($URL, $split) $right = StringRight($URL, $split) $split = SplitURLHelper($left, 2) $left = StringRight($left, $split) $array[0] = $left $array[1] = $right Return $array EndFunc Func SplitURLHelper($String, $pos) $split = StringInStr($String, "/", 0, $pos) If $split == 0 Then $split = StringInStr($String, "\", 0, $pos) EndIf Return $split EndFunc
  14. Good to hear I inspired you! Would you mind giving an example? Like sending a POST with these parameters user=admin pass=admin post data: restart=Restart? http://www.autoitscript.com/forum/index.php?showtopic=83971 Or does WinHTTP still need some work in order to accomplish this?
  15. yeah I gave the latest version of Tomato a try, but i couldn't get it to connect to my TEW-432BRP. Anyway the DD-WRT wiki is very helpful and answers just about any how to question.
  16. I have a very cheap Access Point/Router (Trendnet - TEW-432BRP). The wireless gateway stops working after some time, reseting it works. I have a wireless link between this and my Linksys WRT54G running DD-WRT. Using this script I reset my Trendnet router when the wireless link fails. ;Load http.au3 #include "HTTP.au3" ;Set Parameters $RemoteIP = "192.168.3.2" $LocalIP = "192.168.3.1" $TelnetPort = 23 $SleepTime = 15 * 60 * 1000 ;15 minutes $ResetTime = 5 ;reset router at 5am $ResetBool = False Opt("TrayIconHide", 1) Opt("TrayIconDebug", 1) ;Run Loop While 1 ;Reset Router at the time set no matter what If @HOUR == $ResetTime And $ResetBool == False Then ResetRouter($LocalIP) $ResetBool = True Else $ResetBool = False EndIf Sleep(60 * 1000) ; wait one minute ;Check Wireless Connection $RemoteConnectionOK = CheckRemoteRouter($RemoteIP, $TelnetPort) If Not $RemoteConnectionOK Then ResetRouter($LocalIP) EndIf ;Put Program To Sleep Sleep($SleepTime) WEnd Func ResetRouter($IP) $host = "http://" & $IP & "/" $page = "/restart.cgi" $data = "restart=Restart" $socket = _HTTPConnect($IP) _HTTPPost($host, $page, $socket, $data, "admin", "admin") EndFunc ;==>ResetRouter Func CheckRemoteRouter($IP, $Port) TCPStartup() $socket = TCPConnect($IP, $Port) TCPShutdown() If $socket = -1 Then Return False ;connection bad Else Return True ;connection good EndIf EndFunc ;==>CheckRemoteRouter Get #include "HTTP.au3" from here, with my mod at the last post. http://www.autoitscript.com/forum/index.php?showtopic=29631 http://www.autoitscript.com/forum/index.ph...mp;#entry601371
  17. Changed _HTTPPost() so it can connect to a server that requires a user/pass Func _HTTPPost($host, $page, $socket = -1, $data = "", $user = "", $pass = "") Dim $command If $socket == -1 Then If $_HTTPLastSocket == -1 Then SetError(1) Return EndIf $socket = $_HTTPLastSocket EndIf Dim $datasize = StringLen($data) $command = "POST " & $page & " HTTP/1.1" & @CRLF $command &= "Host: " & $host & @CRLF $command &= "User-Agent: " & $_HTTPUserAgent & @CRLF $command &= "Connection: close" & @CRLF If $user <> "" And $pass <> "" Then $command &= "Authorization: Basic " & _Base64Encode($user & ":" & $pass) EndIf $command &= "Content-Type: application/x-www-form-urlencoded" & @CRLF $command &= "Content-Length: " & $datasize & @CRLF $command &= "" & @CRLF $command &= $data & @CRLF Dim $bytessent = TCPSend($socket, $command) If $bytessent == 0 Then SetExtended(@error) SetError(2) Return 0 EndIf SetError(0) Return $bytessent EndFunc ;==>_HTTPPost Using this Base64Encode function http://www.autoitscript.com/forum/index.php?showtopic=81332
  18. Gmail only sends the first 301 unread emails so if you have more then that, then I need to figure out how to get the listing of the rest of them. If you have less then 300 new messages, then this script can get your last message. POP has no search command http://tools.ietf.org/html/rfc1939#section-9 Thus you would have to download every message and search it locally, if you wanted to find a specific message.
  19. POP v3 released on the 2nd post. It doesn't seem as "stable" as SMTP, adding in sleep(xxxx) in various places probably needs to happen.
  20. Added a Debug to console feature and rewrote some of the functions so they are better behaved.
  21. I plan on doing POP as well, SMTP is so easy I would like to get all the kinks out with that before I do POP. So let me know how it works for you and I'll take it from there.
  22. New Version Up! Look at example script for usage. http://www.autoitscript.com/forum/index.php?showtopic=21889 Where I put a Sleep(3000) it could bomb if you have a slow connection... will think about how to make this more elegant. Let me know what you think!
  23. I'll try and make it into a UDF. That means functions to call, fun stuff like that. Give me a couple of days and I should have something workable. Working on SMTP first So I hope to have these functions be public _SMTP_Connect _SMTP_Login _SMTP_SendEmail _SMTP_Disconnect And here would be some private functions _SMTP_ReadBuffer _SMTP_ChkForCode _SMTP_WriteBuffer It would probably have a Global Variable called $_SMTP_RunPID Probably use error codes and put the burden of checking then on the end user. I'm kinda surprised no one has done this yet... it ain't that hard! btw POP 2.1 doesn't flush the buffer so you can miss part of the email if its fairly large.
  24. Updated first post with a new version that works with v3.2.12.0 and up. Ptrex was interested in this so I did some ugly hacks to get it working again. If there is some interest, I am willing to give this another go; as in make the core code more usable. This new code might stall and sit there and do nothing because I took out my buffer flushes.
  25. LOL, Nice indeed! Post some times so people get an idea of how fast it is. I bet Crypt32.dll goes back to win9x. Anyone know what other potentially useful functions are inside the dll?
×
×
  • Create New...