#!/perl/bin/perl ############################################ # Photoshop SOAP server # Mike Schilli  ############################################ use SOAP::Transport::HTTP; SOAP::Transport::HTTP::CGI    ->dispatch_to("Photoshop::Hoelle")    ->handle; ############################################ package Photoshop::Hoelle; use Win32::OLE; use Win32::OLE::Const 'Photoshop'; ############################################ sub pshopit { ############################################     my($self, $data) = @_;     my($desc, $control, $pngfile);     my $class   = "Photoshop.Application";     my $tmpfile = "c:\\tmp\\ps.jpg";     unlink $tmpfile;     open FILE, ">$tmpfile" or         die "Cannot open tmp file $tmpfile";     binmode FILE;     print FILE $data;     close FILE;         # An Photoshop andocken     my $ps = Win32::OLE->new($class);     $ps->{Visible} = 0;         # Datei öffnen     $desc    = $ps->MakeDescriptor();     $control = $ps->MakeControlObject();     $desc->PutPath(phKeyNull, "$tmpfile");     $control->Play(phEventOpen, $desc,                    phDialogSilent);         # AutoLevels     $desc    = $ps->MakeDescriptor();     $control = $ps->MakeControlObject();     $desc->PutBoolean(phKeyAuto, 1);     $control->Play(phEventLevels, $desc,                    phDialogSilent);         # Resize auf 600*800     $desc    = $ps->MakeDescriptor();     $control = $ps->MakeControlObject();     $desc->PutUnitDouble(phKeyWidth,              phUnitPixels, 600);     $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);     ($pngfile = $tmpfile) =~ s/jpg$/png/;     $d1->PutPath(phKeyIn, $pngfile);     $d1->PutBoolean(phKeyLowercase, 1);     $control->Play(phEventSave, $d1,         phDialogSilent);     $desc    = $ps->MakeDescriptor();     $control = $ps->MakeControlObject();     $control->Play(phEventClose, $desc,                    phDialogSilent);     open FILE, "<$pngfile" or         die "Cannot open tmp file $pngfile";     binmode FILE;     my $data = join '', ;     close FILE;     unlink $pngfile;     unlink $tmpfile;     return $data; }