Comment utiliser Imagick pour fusionner et masquer des images?

je connais très peu le traitement d'image et encore moins la terminologie utilisée, alors soyez indulgents.

fondamentalement, je veux fusionner deux images ensemble où l'une d'elles agira comme un masque. Cette image ressemble à quelque chose comme ceci:

Example

Où le fond bleu et le fond jaune sont à la fois transparents dans la réalité.

cette image est utilisée comme masque pour les photos régulières. Parties de la photo qui "sortent" du cercle besoin d'être "recadré" (rendu invisible) tant que l'intérieur reste visible.

Donc tout ce qui vient dans la zone bleue est invisible, tout dans la zone jaune est visible.

honnêtement, je n'ai aucune idée de comment faire de sorte que toute aide serait grandement appréciée!

Edit:

J'utilise la version API D'Imagick, pas la version en ligne de commande

Edit:

Pour avoir une idée de ce que je veux atteindre, d'ici est un exemple.

Les images d'entrée sont donc:

enter image description here

C'est le masque de l'image, toujours la même

enter image description here

Ceci est un exemple d'une image, dynamique

enter image description here

Voici à quoi devrait ressembler le résultat final

25
demandé sur iND 2012-01-02 13:31:19

4 réponses

donc, enfin, ceci devrait faire ce dont vous avez besoin:

image originale:

http://i.stack.imgur.com/b7seR.png

masque d'Opacité:

enter image description here

superposition:

http://i.stack.imgur.com/3ulkM.png

Sortie:

enter image description here

Le code:

<?php
$base = new Imagick('U0R4F.png');
$mask = new Imagick('mask.png');
$over = new Imagick('3ulkM.png');

// Setting same size for all images
$base->resizeImage(274, 275, Imagick::FILTER_LANCZOS, 1);

// Copy opacity mask
$base->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);

// Add overlay
$base->compositeImage($over, Imagick::COMPOSITE_DEFAULT, 0, 0);

$base->writeImage('output.png');
header("Content-Type: image/png");

echo $base;
?>

j'espère que c'est dès maintenant! Note: dans votre exemple, on dirait que vous avez réduit l'échelle de l'image de base, ce que je n'ai pas fait (mon but est juste de montrer comment le masquage est fait).

62
répondu user703016 2012-01-04 18:00:15

Avez-vous essayé cette solution comme décrit par : https://stackoverflow.com/a/2351173/1093649 ?

exécutez ceci dans votre serveur (avec les bons noms d'image!), et laissez-nous savoir, merci.

nb : les crédits vont à jspash

1
répondu Justin T. 2017-05-23 12:02:20

http://www.imagemagick.org/Usage/compose/#dstin devrait faire l'affaire, mais vous devez utiliser des images avec des canaux alpha (cela ne devrait pas être un problème).

Edit: en PHP, vous devez passer (imagick::COMPOSITE_DSTIN) comme paramètre dans compositeimage. Les autres filtres Constantes De L'Opérateur Composite peut également être utile pour vous.

0
répondu Viruzzo 2012-01-04 09:53:22

ce type de masquage est illustré par un certain nombre de techniques différentes en Exemples ImageMagick, vignettes, masque et peinture http://www.imagemagick.org/Usage/thumbnails/#mask_paint

être averti cependant que le masquage et les bords de l'image de superposition ne devraient pas correspondre c'est important ou vous pouvez avoir des problèmes avec les effets d'aliasing de bord qui est mieux évité.

extraire un masque alpha de l'anneau, peut être fait en utilisant des opérateurs morphologiques mince vers le bas pour un axe peut être utilisé pour générer un masque pour n'importe quel anneau de forme. ImageMagick exemples, squelettes par éclaircissage, et taille http://www.imagemagick.org/Usage/morphology/#thinning_skeleton

Anthony Thyssen Web Master pour les exemples ImageMagick, et Developer pour ImageMagick

PS: sympa la photo de Elfling

0
répondu anthony 2012-04-24 01:47:16