Vous pouvez utiliser opérateur de +distort
ImageMagick comme ceci:
D'abord, créer la forme de départ:
convert -size 100x300 xc:green shape.gif
maintenant déformer pour élargir la base:
convert shape.gif -virtual-pixel none \
+distort Perspective '0,0,0,0 99,0,99,0 0,299,-60,299 99,299,160,299' result.gif
Il y a 4 paires de nombres. La première paire dit pixel [0,0] (coin supérieur gauche) dans l'image d'entrée doit apparaître à [0,0] dans l'image de sortie. La seconde indique que le pixel [99,0] (en haut à droite) doit apparaître au même endroit dans l'image de sortie. Le troisième dit que le pixel en bas à gauche doit être à [-60,299] dans l'image de sortie - c'est-à-dire 60 pixels à gauche de sa position actuelle et en dehors de la limite de l'image actuelle. De même, le pixel en bas à droite doit apparaître à 60 pixels à droite de sa position actuelle et donc en dehors de la base d'image existante.
Le paramètre de pixel virtuel none
rend les pixels nouvellement créés transparents. Il existe d'autres paramètres possibles pour le pixel virtuel, qui peut être répertorié comme suit:
identify -list virtual-pixel
Sortie
Background
Black
CheckerTile
Dither
Edge
Gray
HorizontalTile
HorizontalTileEdge
Mirror
None
Random
Tile
Transparent
VerticalTile
VerticalTileEdge
White
Si vous voulez rendre votre code un peu plus indépendant des dimensions de la l'image, vous pouvez les paramétrer à l'aide fx
opérateurs et la nouvelle commande magick
en place de convert
:
magick shape.gif -virtual-pixel none \
+distort Perspective '0,0,0,0 %[fx:w-1],0,%[fx:w-1],0 0,%[fx:h-1],-60,%[fx:h-1] %[fx:w-1],%[fx:h-1],%[fx:w+60],%[fx:h-1]' result.gif
Il y a jmagick mais je ne pense pas qu'il supporte -distort. Vous pouvez utiliser AJAX pour transmettre des coordonnées de JavaScript à Imagemagick/php et je suppose que cela dépend de la fonctionnalité que vous voulez. On dirait que vous pouvez utiliser magick graphique avec node.js – Bonzo
Est-ce que ma réponse a résolu votre problème? Si c'est le cas, veuillez envisager de l'accepter comme réponse - en cliquant sur la coche/coche verte en regard du nombre de votes. Si non, veuillez dire ce qui n'a pas fonctionné pour que moi ou quelqu'un d'autre puisse vous aider davantage. Merci. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –