0

Je dois augmenter la largeur d'une image donnée de haut en bas avec certains rapports d'aspect.
Existe-t-il des solutions dans PHP GD/imagemagick/fabric js ou existe-t-il d'autres applications?Application d'une transformation de perspective à une image

First image is the Source. And I need the output like the second image

+0

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

+0

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 –

Répondre

1

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 

enter image description here

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 

enter image description here

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 
+0

"la nouvelle commande magick à la place de convertir" dans la version 7 de imagemagick. Je vois que vous avez réussi à se mettre en ligne fx Mark – Bonzo

+0

@Bonzo Oui, merci! Voir - vous ** pouvez ** enseigner à un vieux chien de nouvelles astuces ;-) –