创建放置阴影的Perl Image::Magick方法(非命令行)

创建放置阴影的Perl Image::Magick方法(非命令行),perl,imagemagick,shadow,Perl,Imagemagick,Shadow,我发现这个PHP版本似乎是我需要的结果 <?php try { /*** a new Imagick object ***/ $im = new Imagick('images/spork.jpg'); /*** set the image format to png ***/ $im->setImageFormat('png'); /*** an object for the drop shadow ***/ $sha

我发现这个PHP版本似乎是我需要的结果

    <?php

try
{

    /*** a new Imagick object ***/
    $im = new Imagick('images/spork.jpg');

    /*** set the image format to png ***/
    $im->setImageFormat('png');

    /*** an object for the drop shadow ***/
    $shadow = $im->clone();

    /*** an object for the drop shadow ***/
    $drop_shadow = $im->clone();

    /*** set shadow color to black ***/
    $drop_shadow->setImageBackgroundColor( new ImagickPixel( 'black' ) );

    /*** Create the shadow ***/
    $drop_shadow->shadowImage( 80, 3, 5, 5 );

    /*** stick them together ***/
    $drop_shadow->compositeImage( $im, Imagick::COMPOSITE_OVER, 0, 0 );

    /*** write image to disk ***/
    $drop_shadow->writeImage( '/tmp/dropshadow.png' );

    echo 'Wrote Image';
}
catch(Exception $e)
{
    echo $e->getMessasge();
}
?>
这给了我一个很好的阴影纵横比(ed)图像,在480x360框/画布中居中,与页面bgcolor f7f7f7匹配

现在,我希望在不使用系统方法的情况下实现这一点

所以,我试过这个:

        #!/usr/bin/perl -w
        use Image::Resize;
        use Image::Magick;
        use strict;
        my imageurl='http://nonprofit.org/images/someimage.jpg';
        my $contact='email@email.org';
        my $ibig = Image::Magick->new;
        $ibig->Read("$imageurl");
        $ibig->Resize(geometry=>'476x356');
        $ibig->Montage(geometry=>'476x356',
          background=>'#F7F7F7',
          quality=>90,gravity=>'center',
          shadow=>80x4+4+4); 
    #tried shadow=>'true'  and '1' and many other variations.
     $ibig->Annotate(text=>$contact,
          x=>2,y=>1,
          font=>'Candice',
          pointsize=>14,
          stroke=>'#000C',
          strokewidth=>2,
          gravity=>'SouthWest');

    $ibig->Annotate(text=>$contact,
          x=>2,y=>2,
          font=>'Candice',
          pointsize=>14,
          fill=>'#ffffff',
          stroke=>'none',
          gravity=>'SouthWest');

     $ibig->Montage(geometry=>'480x360',
          background=>'#F7F7F7',
          quality=>90,
          fill=>'#F7F7F7');

$ibig->Write("$new");
这是行不通的。注释可以工作,但是没有阴影,图像通常以479x360结尾

系统方法可以完美地工作,但是,我真的很想通过我的Image::Magick示例来学习如何做到这一点

我花了两天的时间研究这本书并阅读了《男人》

当我弄不明白的时候,我会来到stackoverflow,并总是得到一个解决方案

提前谢谢

(很抱歉格式化问题。我试图清理它。)

Montage()
返回新图像。 尝试:


不幸的是,没有明确提到这一点,但本页上有一些例子说明了这一点。

“当我弄不明白时,我会来到stackoverflow并总能找到解决方案!”所以为什么你的声誉只有1?不知道。我来这里已经一年了。也许是因为我总是在一天结束时删除我的cookies?不管怎么说,别在乎推销员,不是为了这个。这会影响我获得答案的能力吗?与我有关..无法通过包“Exception 410:无法识别的属性`quality'@Magick.xs/xs_Image__Magick_Montage/9797”找到对象方法“Write”(可能您忘记加载“例外410:但是,阴影语法呢?我在最后一行中放弃了质量,没有更多的错误,但仍然没有阴影,这对我来说是一个真正的麻烦。然后,
$ibig
包含错误字符串
“例外410:无法识别的属性
quality'@Magick.xs/xs_Image\uu Magick\u Montage/9797”
。这意味着对
$ibig`的赋值导致了该错误。
质量
确实不是
蒙太奇()
的参数。请参阅关于异常的说明。我是否应该使用$ibig=$ibig=>(yada)在调整大小和写入之间的所有路径?THNAK用于辅助。否,请参阅上面的文档链接以查看哪些方法返回新图像。
        #!/usr/bin/perl -w
        use Image::Resize;
        use Image::Magick;
        use strict;
        my imageurl='http://nonprofit.org/images/someimage.jpg';
        my $contact='email@email.org';
        my $ibig = Image::Magick->new;
        $ibig->Read("$imageurl");
        $ibig->Resize(geometry=>'476x356');
        $ibig->Montage(geometry=>'476x356',
          background=>'#F7F7F7',
          quality=>90,gravity=>'center',
          shadow=>80x4+4+4); 
    #tried shadow=>'true'  and '1' and many other variations.
     $ibig->Annotate(text=>$contact,
          x=>2,y=>1,
          font=>'Candice',
          pointsize=>14,
          stroke=>'#000C',
          strokewidth=>2,
          gravity=>'SouthWest');

    $ibig->Annotate(text=>$contact,
          x=>2,y=>2,
          font=>'Candice',
          pointsize=>14,
          fill=>'#ffffff',
          stroke=>'none',
          gravity=>'SouthWest');

     $ibig->Montage(geometry=>'480x360',
          background=>'#F7F7F7',
          quality=>90,
          fill=>'#F7F7F7');

$ibig->Write("$new");
$ibig = $ibig->Montage(...)