En utilisant ImageMagick sur la ligne de commande que je peux direComment puis-je centrer les légendes dans PerlMagick?
convert -background '#0000' -fill white -stroke black -strokewidth 3 -gravity center -pointsize 78 -size 568x1000 caption:'Lorem ipsum etc etc' -trim +repage out.png
Et produire la sortie que je cherche. Ce que j'aimerais faire, c'est la même chose, mais dans PerlMagick, pour ne pas avoir à lire et à écrire des fichiers pendant que j'effectue d'autres étapes. Voici ce que j'ai jusqu'à maintenant
use strict;
use warnings;
use Image::Magick;
my $im = new Image::Magick;
my $e = $im->Set(
background => '#0000',
fill => 'white',
stroke => 'black',
strokewidth => 3,
gravity => 'center',
pointsize => 78,
size => '586x1000',
);
die $e if $e;
$e = $im->Read("caption:Lorem ipsum etc etc");
die $e if $e;
$e = $im->Trim();
die $e if $e;
$e = $im->Set(page=>'0x0+0+0'); # +repage
die $e if $e;
$e = $im->Write('out.png');
die $e if $e;
Et cela fonctionne exactement de la même manière, sauf que le texte résultant n'est pas centré.
La documentation sur PerlMagick est presque inexistante. J'ai basé cette syntaxe de «légende de lecture» sur certains exemples de MagicWand, où l'on prétend que cela entraînera un texte centré. Clairement, quelque chose est différent pour PerlMagick. Donc, la question: Comment puis-je faire en sorte que PerlMagick respecte la gravité dans ce cas? Comment obtenir un texte multiligne, centré et enveloppé de mots via PerlMagick? Notez que cela nécessite que j'utilise une légende et ne pas annoter ou dessiner. Je préférerais éviter le centrage manuel par ligne, mais je le considérerais. Alternativement, si quelqu'un a un échantillon de faire un emballage de mots et avec des polices proportionnelles et Annoter, alors cela fonctionnerait pour moi.
EDIT: Veuillez noter que l'option -caption de polaroid, bien qu'elle partage l'implémentation avec ce que je fais, n'est pas la même que la légende: pseudo-image. J'accepterais toujours une réponse en utilisant polaroid et -caption si la sortie correspond étroitement à ce qui est donné par l'exemple de commande convert ci-dessus.
EDIT 2: Voici un exemple plus minimal du problème.
use strict;
use warnings;
use Image::Magick;
my $im = new Image::Magick;
my $e = $im->SetAttribute(
background => '#0000',
pointsize=>12,
size => '100x100',
gravity => 'center',
);
die $e if $e;
$e = $im->ReadImage('caption:The quick brown fox jumps over the lazy dog.');
die $e if $e;
$e = $im->Write('out.png');
die $e if $e;
Résultat attendu: Le texte est centré.
Résultat actuel: Le texte est justifié à gauche.
Résultat réel doit être identique à la sortie de cette commande:
convert -background '#0000' -size 100x100 -pointsize 12 -gravity center caption:'The quick brown fox jumps over the lazy dog.' out.png
De la recherche à la source de perlmagick je ne vois rien qui devrait être Intercepter un appel SetAttribute particulier, donc je ne vois pas pourquoi la gravité est être ignoré. Comment puis-je faire en sorte que la gravité ne soit pas ignorée pour cela? Ou, comment puis-je faire du texte enveloppé et centré avec ce type de sortie?
ai pas essayé mais je me demande s'il y a quelque chose qui peut être réutilisé. http://code.google.com/p/image-boxmodel/source/browse/trunk/lib/Image/BoxModel/Backend/IM.pm?r=28#95 –
Je vais essayer cela dans quelques heures quand je rentre du travail. Mon éventuelle solution de contournement consistait à faire PerlMagick effectuer le rendu non-centré à plusieurs reprises à différents points jusqu'à ce que l'image résultante soit dans ma taille de boîte. J'appelle ensuite pour convertir via system() et le faire effectuer le rendu final. Il utilise plusieurs fois la puissance du processeur d'une vraie solution native, donc j'essaie toujours, mais au moins j'ai quelque chose sur lequel je peux me rabattre. – Sorpigal