Da steht nur ein Bareword, weil es das
phLowercase nicht gibt.
phLowerCase wird dagegen als Konstante durch
use Win32::OLE::Const 'Adobe Photoshop'; geladen.
Kannst Du auch selbst machen, indem Du Konstanten in einem Deiner Module definierst und dann in den Namensraum des Skripts exportierst!
Deswegen ist es schon ganz wichtig, wie es geschrieben wird...
Hier übrigens mein Code..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#! /usr/bin/perl
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Const 'Adobe Photoshop';
use File::Spec;
use Getopt::Long;
my ($dir,$size) = ('./',350);
GetOptions('-d=s' => \$dir,
'-s=n' => \$size,);
opendir(DIR,$dir) or die $!;
my @files = grep{$_ !~ /^\.\.?$/}readdir(DIR);
closedir DIR;
foreach my $image_file(@files){
$image_file = $dir.'/'.$image_file;
# start photoshop
my $ps = Win32::OLE->new('Photoshop.Application') or die $!;
$ps->{Visible} = 0;
# open image
my $desc = $ps->MakeDescriptor();
my $control = $ps->MakeControlObject();
$desc->PutPath(phKeyNull,$image_file);
$control->Play(phEventOpen,$desc,phDialogSilent);
# autolevels
$desc = $ps->MakeDescriptor();
$control = $ps->MakeControlObject();
$desc->PutBoolean(phKeyAuto, 1);
$control->Play(phEventLevels,$desc,phDialogSilent);
# resize image
$desc = $ps->MakeDescriptor();
$control = $ps->MakeControlObject();
$desc->PutUnitDouble(phKeyWidth, phUnitPixels, $size);
$desc->PutBoolean(phKeyConstrainProportions, 1);
$desc->PutEnumerated(phKeyInterfaceIconFrameDimmed,phTypeInterpolation,phEnumBicubic);
$control->Play(phEventImageSize,$desc,phDialogSilent);
$control = $ps->MakeControlObject();
my $d1 = $ps->MakeDescriptor();
my $d2 = $ps->MakeDescriptor();
$d2->PutEnumerated(phKeyPNGInterlaceType,phTypePNGInterlaceType,phEnumPNGInterlaceNone);
$d2->PutEnumerated(phKeyPNGFilter,phTypePNGFilter,phEnumPNGFilterAdaptive);
$d1->PutObject(phKeyAs,phClassPNGFormat,$d2);
(my $outfile = File::Spec->rel2abs($image_file)) =~ s/\.+[^\.]+$/_thumb${size}.png/;
print $outfile,"\n";
$d1->PutPath(phKeyIn,$outfile);
$d1->PutBoolean(phKeyLowerCase, 1);
$control->Play(phEventSave,$d1,phDialogSilent);
$desc = $ps->MakeDescriptor();
$control = $ps->MakeControlObject();
$control->Play(phEventClose,$desc,phDialogSilent);
}
Jetzt habe ich nur noch das Problem, dass nach dem Beenden des Skripts Photoshop immer noch im TaskManager auftaucht. Es wird also anscheinend nicht richtig beendet.
Das ist jetzt nicht wirklich tragisch, da ich das ohne Probleme manuell beenden kann, aber wenn einer ne Lösung hat, wäre ich dankbar!