Проблемы с Imagemagick

  • Автор темы Asche
  • Дата начала
A

Asche

Гость
#1
Никак не могу сделать так, чтобы функция make_thumbnail, обрабатывающая изображения, делала бекграунд не чёрным в png, а нужным мне цветом. Для заливки бекграунда в нужный мне цвет нужно к convert добавить -background #EEEEEE. Привожу функцию:
Код:
sub make_thumbnail($$$$$;$)
{
my ($filename,$thumbnail,$width,$height,$quality,$convert)=@_;

# first try ImageMagick

my $magickname=$filename;
$magickname.="[0]" if($magickname=~/\.gif$/);

$convert="convert" unless($convert);
`$convert -size ${width}x${height} -geometry ${width}x${height}! -quality $quality $magickname $thumbnail`;

return 1 unless($?);

# if that fails, try pnmtools instead

if($filename=~/\.jpg$/)
{
`djpeg $filename | pnmscale -width $width -height $height | cjpeg -quality $quality > $thumbnail`;
# could use -scale 1/n
return 1 unless($?);
}
elsif($filename=~/\.png$/)
{
`pngtopnm $filename | pnmscale -width $width -height $height | cjpeg -quality $quality > $thumbnail`;
return 1 unless($?);
}
elsif($filename=~/\.gif$/)
{
`giftopnm $filename | pnmscale -width $width -height $height | cjpeg -quality $quality > $thumbnail`;
return 1 unless($?);
}

# try Mac OS X's sips

`sips -z $height $width -s formatOptions normal -s format jpeg $filename --out $thumbnail >/dev/null`; # quality setting doesn't seem to work
return 1 unless($?);

# try PerlMagick (it sucks)

eval 'use Image::Magick';
unless($@)
{
my ($res,$magick);

$magick=Image::Magick->new;

$res=$magick->Read($magickname);
return 0 if "$res";
$res=$magick->Scale(width=>$width, height=>$height);
#return 0 if "$res";
$res=$magick->Write(filename=>$thumbnail, quality=>$quality);
#return 0 if "$res";

return 1;
}

# try GD lib (also sucks, and untested)
eval 'use GD';
unless($@)
{
my $src;
if($filename=~/\.jpg$/i) { $src=GD::Image->newFromJpeg($filename) }
elsif($filename=~/\.png$/i) { $src=GD::Image->newFromPng($filename) }
elsif($filename=~/\.gif$/i)
{
if(defined &GD::Image->newFromGif) { $src=GD::Image->newFromGif($filename) }
else
{
`gif2png $filename`; # gif2png taken from futallaby
$filename=~s/\.gif/\.png/;
$src=GD::Image->newFromPng($filename);
}
}
else { return 0 }

my ($img_w,$img_h)=$src->getBounds();
my $thumb=GD::Image->new($width,$height);
$thumb->copyResized($src,0,0,0,0,$width,$height,$img_w,$img_h);
my $jpg=$thumb->jpeg($quality);
open THUMBNAIL,">$thumbnail";
binmode THUMBNAIL;
print THUMBNAIL $jpg;
close THUMBNAIL;
return 1 unless($!);
}

return 0;
}
Я пробовал сделать так:
Код:
sub make_thumbnail($$$$$;$)
{
my ($filename,$thumbnail,$width,$height,$quality,$convert)=@_;

# first try ImageMagick

my $magickname=$filename;
$magickname.="[0]" if($magickname=~/\.gif$/);

$convert="convert" unless($convert);
`$convert -size ${width}x${height} -background #EEEEEE -geometry ${width}x${height}! -quality $quality $magickname $thumbnail`;
С png всё становится нормально, но gif'ы вообще перестают создаваться.