Проблемы с Imagemagick

Тема в разделе "Perl программирование", создана пользователем Asche, 22 янв 2009.

  1. Asche

    Asche Гость

    Никак не могу сделать так, чтобы функция make_thumbnail, обрабатывающая изображения, делала бекграунд не чёрным в png, а нужным мне цветом. Для заливки бекграунда в нужный мне цвет нужно к convert добавить -background #EEEEEE. Привожу функцию:
    Код (Text):
    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;
    }
    Я пробовал сделать так:
    Код (Text):
    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'ы вообще перестают создаваться.
     
Загрузка...
Похожие Темы - Проблемы Imagemagick
  1. aliaksandr89
    Ответов:
    3
    Просмотров:
    125
  2. Amfion
    Ответов:
    5
    Просмотров:
    122
  3. wowa
    Ответов:
    7
    Просмотров:
    380
  4. John_Tavarez
    Ответов:
    0
    Просмотров:
    338
  5. Валентин Амбер
    Ответов:
    11
    Просмотров:
    346

Поделиться этой страницей