#!/perl/bin/perl
############################################
# Photoshop SOAP server
# Mike Schilli <
[email protected]>
############################################
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 '', <FILE>;
close FILE;
unlink $pngfile;
unlink $tmpfile;
return $data;
}