#!/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; }