2011-01-29 1 views
0

J'ai trouvé cette version de PHP qui semble être le résultat dont j'ai besoin.Perl Image :: Magick Méthode pour créer une ombre portée (ligne de commande)

<?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(); 
} 
?> 

(ai essayé de poster l'image, ne me laisserait pas.) Exemple ici: spork with drop shadow

Maintenant, j'ai obtenu des résultats que je besoin en utilisant cette en Perl (avec une autre image):

#!/usr/bin/perl -w 
use strict; 
my imageurl='http://nonprofit.org/images/someimage.jpg'; 
my $contact='[email protected]'; 
system("montage $imageurl -geometry 476x356 -background '#F7F7F7' -quality 90 -fill '#ffffff' -shadow \ -stroke '#000C' -strokewidth 2 -gravity SouthWest -font Candice -pointsize 14 -annotate +2+1 '$contact' \ -stroke none -fill white -gravity SouthWest -font Candice -pointsize 14 -annotate +2+2 '$contact' \ -gravity center $new"); 

system("montage $new -geometry 480x360 -background '#F7F7F7' -quality 90 -fill '#F7F7F7' $new"); 

Ce qui me donne une belle image de rapport d'aspect d'ombre (ed) de baisse centrée dans une boîte 480x360/toile qui correspond aux pages bgcolor f7f7f7. Maintenant, je désire faire ceci sans employer la méthode de système.

Alors, j'ai essayé ceci:

 #!/usr/bin/perl -w 
     use Image::Resize; 
     use Image::Magick; 
     use strict; 
     my imageurl='http://nonprofit.org/images/someimage.jpg'; 
     my $contact='[email protected]'; 
     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"); 

Ce qui ne fonctionne pas. L'annotation fonctionne mais, aucune ombre portée et l'image se termine généralement par 479x360.

La méthode système fonctionne parfaitement, mais je veux vraiment apprendre à le faire avec mon exemple Image :: Magick. J'ai passé deux jours à faire des recherches sur ce sujet et à lire l'homme. Quand je ne peux pas comprendre, je viens à stackoverflow et TOUJOURS obtenir une solution!

Merci d'avance.

(Désolé problèmes de formatage .. J'ai essayé de le nettoyer.)

+0

"Quand je ne peux pas comprendre, je viens à stackoverflow et TOUJOURS avoir une solution!" Alors, pourquoi avez-vous seulement une réputation de 1? – mscha

+0

Dunno. Je viens ici depuis un an. Peut-être parce que je supprime toujours mes cookies à la fin de la journée? Ne se soucient pas de rep de toute façon, pas ici pour ça. Est-ce que cela affectera ma capacité à obtenir des réponses? Me préoccupe .. – DulcimerDude

Répondre

0

Montage() retourne une nouvelle image. Essayez:

$ibig = $ibig->Montage(...) 

Le documentation ne mentionne pas explicitement, malheureusement, mais il y a des exemples sur cette page qui montrent.

+0

Impossible de localiser la méthode objet "Écrire" via le package "Exception 410: attribut non reconnu' qualité '@ Magick.xs/XS_Image__Magick_Montage/9797 "(peut-être avez-vous oublié de charger" Exception 410: Mais, qu'en est-il de la syntaxe shadow? ? – DulcimerDude

+0

'shadow => 1' semble faire l'affaire pour moi – mscha

+0

J'ai jeté la qualité sur cette dernière ligne et pas plus d'erreur mais, toujours pas d'ombre qui, est un vrai extracteur de cheveux pour moi – DulcimerDude

Questions connexes