Avatar billede osborne Praktikant
24. februar 2007 - 08:04 Der 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
Avatar billede soes Nybegynder
24. februar 2007 - 11:35 #1
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.
Avatar billede whatever Nybegynder
24. februar 2007 - 11:40 #2
Du kan godt arbejde med f.eks. JavaScript i Photoshop, men den kan håndtere VbScript skal jeg ikke kunne sige.

Vælg File > Scripts > Browse...
Avatar billede osborne Praktikant
24. februar 2007 - 15:57 #3
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

'fileName = appRef.Path & "\Samples\Ranch House.jpg"
fileName = "C:\\temp\\AutoCrop_Eksperiment\\IMG_1819.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

' Kald routinen
doResize()
Avatar billede osborne Praktikant
24. februar 2007 - 15:58 #4
Tak for hjælp - det bragte mig et skridt videre.
Smid et svar så giver jeg point.
Avatar billede soes Nybegynder
25. februar 2007 - 12:36 #5
du får lige et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester