24. februar 2007 - 08:04Der er
4 kommentarer og 1 løsning
Brug af VB Script i Photoshop
Ved ikke om dette er kategorien at spørger i, så jeg håber det ikke betagtes som dobbeltpost at jeg spørger her i VB scripting sectionen (jeg har et andet spørgsmål om emnet i Billedbehandling/Photoshop sektionen)
Jeg er ved at lære om brug af scripts i Photoshop og vil gerne prøve følgende script af (skreve af Mr. Ali) og se om det gør hvad det skal. Mit problem er hvordan jeg starter/aktiverer dette script i Photoshop. Nogen ide om det?
Sub DoResize()
'-- I created this code with Visual Basic V6
Dim appRef As Photoshop.Application Dim docRef2 As Photoshop.Document Dim long_side Dim short_side Dim dpi Dim nW Dim nH Dim proportion1 Dim proportion2 Dim newX Dim newY
dim fileName as string
long_side = 583 ' Must be > 0 short_side = 0 ' You must leave this to 0 if you decide to assign a value to long_side variable. dpi = 300 ' 72
Set appRef = CreateObject("Photoshop.Application")
' Set the ruler units. Dim strtRulerUnits As Photoshop.PsUnits
' Set Photoshop dialogs option to not be displayed during automated execution appRef.DisplayDialogs = psDisplayNoDialogs
' Set current ruler units in Preferences is pixels strtRulerUnits = appRef.Preferences.RulerUnits appRef.Preferences.RulerUnits = psPixels
fileName = appRef.Path & "\Samples\Ranch House.jpg" Set docRef2 = appRef.Open(fileName) If appRef.Documents.Count > 0 Then Set docRef2 = appRef.ActiveDocument
' Initialise the fixed variables Set docRef2 = appRef.ActiveDocument nW = docRef2.Width nH = docRef2.Height If long_side = 0 Then 'fit to short side If (nW > nH) Then proportion1 = short_side / nH Else proportion1 = short_side / nW End If ElseIf short_side = 0 Then ' fit to long side If (nW > nH) Then proportion1 = long_side / nW Else proportion1 = long_side / nH End If End If If (nW > nH) Then proportion1 = long_side / nW proportion2 = short_side / nH Else proportion1 = short_side / nW proportion2 = long_side / nH End If If (proportion1 >= proportion2) Then newX = proportion1 * nW newY = proportion1 * nH Else newX = proportion2 * nW newY = proportion2 * nH End If If (newX > nW) Then docRef2.ResizeImage newX, newY, dpi, bicubic Else docRef2.ResizeImage newX, newY, dpi, bicubic End If Else MsgBox ("no image is active") End If End Sub
Så vidt jeg ved kan du ikke kalde scripts fra PS. Skal lige siges at jeg ikke er den store PS haj.
Tag overstående script gem det i en fil kaldet reSize.vbs
Før 'Sub DoResize()' kan du tilføje DoResize().
Det der sker er at Windows vil fortolke scriptet.
Det første der sker er at den starter en instanse af PS som den efterfølgende vil bruge til at resize dit billede uden at du selv skal til at starte PhotoShop.
Tak for jeres svar. Som du skriver (whatever) kan man godt køre JavaScript fra Photoshop (både .JS og .JSX applescripts) men VB scripts kommer ikke frem på listen. Derfor kan det være du har ret (soes) at man skal køre det udefra.
Jeg har fundet en lille sentens om det i den medfølgende scripting pdf fil til Photoshop (og der står at både JavaScript, Applescript og VBscript er understøttet men ikke så meget om hvordan man kører VB inde fra PS.. så kan man nok ikke)
Ok, har nu rettet lidt i scriptet (tak soes) og også fixet et par DIM sætninger så nu kan den faktiske starte Photoshop CS2 op!!
Kommer så en fejl, men det må jeg hellere oprette et andet spørgsmål om.
Koden ser nu sådan ud (bemærk de ændrede DIM sætninger, min windows XP kunne simpelthen ikke lide at det stod på den måde det gjorde og som jeg nu har kommenteret ud i koden og tilføjet de ændrede sætninger):
Sub DoResize()
'-- Mr. Ali: I created this code with Visual Basic V6 ' 2006-02-24 Tilrettet
'Dim appRef As Photoshop.Application DIM appRef SET appRef = CreateObject("Photoshop.Application")
'Dim docRef2 As Photoshop.Document DIM docRef2 SET docRef2 = CreateObject("Photoshop.Document")
Dim long_side Dim short_side Dim dpi Dim nW Dim nH Dim proportion1 Dim proportion2 Dim newX Dim newY
'dim fileName as string DIM fileName SET fileName = String
long_side = 583 ' Must be > 0 short_side = 0 ' You must leave this to 0 if you decide to assign a value to long_side variable. dpi = 300 ' 72
Set appRef = CreateObject("Photoshop.Application")
' Set the ruler units. 'Dim strtRulerUnits As Photoshop.PsUnits DIM strtRulerUnits SET strtRulerUnits = "Photoshop.PsUnits"
' Set Photoshop dialogs option to not be displayed during automated execution appRef.DisplayDialogs = psDisplayNoDialogs
' Set current ruler units in Preferences is pixels strtRulerUnits = appRef.Preferences.RulerUnits appRef.Preferences.RulerUnits = psPixels
Set docRef2 = appRef.Open(fileName) If appRef.Documents.Count > 0 Then Set docRef2 = appRef.ActiveDocument
' Initialise the fixed variables Set docRef2 = appRef.ActiveDocument nW = docRef2.Width nH = docRef2.Height If long_side = 0 Then 'fit to short side If (nW > nH) Then proportion1 = short_side / nH Else proportion1 = short_side / nW End If ElseIf short_side = 0 Then ' fit to long side If (nW > nH) Then proportion1 = long_side / nW Else proportion1 = long_side / nH End If End If If (nW > nH) Then proportion1 = long_side / nW proportion2 = short_side / nH Else proportion1 = short_side / nW proportion2 = long_side / nH End If If (proportion1 >= proportion2) Then newX = proportion1 * nW newY = proportion1 * nH Else newX = proportion2 * nW newY = proportion2 * nH End If If (newX > nW) Then docRef2.ResizeImage newX, newY, dpi, bicubic Else docRef2.ResizeImage newX, newY, dpi, bicubic End If Else MsgBox ("no image is active") End If End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.