Je connais très peu de choses sur le traitement des images et encore moins sur la terminologie utilisée. Veuillez donc supporter.
Fondamentalement, je veux fusionner deux images ensemble, l’une d’elles servant de masque. Cette image ressemble à ceci:
Où le fond bleu et jaune sont tous deux transparents dans la réalité.
Cette image est utilisée comme masque pour les photos ordinaires. Les parties de la photo qui "dépassent" du cercle doivent être "rognées" (rendues invisibles), tandis que l'intérieur reste visible.
Ainsi, tout ce qui vient dans la zone bleue est invisible, tout ce qui se trouve dans la zone jaune est visible.
Honnêtement, je n'ai aucune idée de la façon de procéder, alors toute aide serait grandement appréciée!
Modifier:
J'utilise la version API d'Imagick, pas la version en ligne de commande
Modifier:
Pour avoir une idée de ce que je veux réaliser, voici un exemple.
Les images d'entrée sont donc:
Ceci est l'image du masque, toujours la même
Ceci est un exemple d'image dynamique
Voici à quoi devrait ressembler le résultat final
Donc, finalement, cela devrait faire ce dont vous avez besoin:
Image originale:
Masque d'opacité:
Superposition:
Sortie:
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 maintenant! Remarque: Dans votre exemple, il semble que vous ayez réduit l'image de base, ce que je n'ai pas fait (mon objectif est simplement de montrer comment le masquage est effectué).
Avez-vous essayé cette solution ici comme décrit par: https://stackoverflow.com/a/2351173/1093649 ?
Exécutez ceci sur votre serveur (avec les bons noms d'images!), Et faites-le nous savoir, merci.
nb: les crédits vont à jspash
Ce type de masquage est décrit à l'aide d'un certain nombre de techniques différentes dans Exemples ImageMagick, Vignettes, Masque et Peinture http://www.imagemagick.org/Usage/thumbnails/#mask_Paint
Soyez averti cependant que le masquage et les bords de l'image de surimpression NE DEVRAIT PAS ÊTRE CORRESPONDANTS C'est important sinon vous pouvez avoir des problèmes avec les effets de crénelage des bords qu'il vaut mieux éviter.
Pour extraire un masque alpha de l'anneau, vous pouvez utiliser des opérateurs de morphologie pour l'amincir à un trait d'axe. Cet masque peut également être utilisé pour générer un masque pour toute forme d'anneau aléatoire. . http://www.imagemagick.org/Usage/morphology/#thinning_skeleton
Anthony Thyssen Webmestre pour les exemples ImageMagick et développeur pour ImageMagick
PS: Jolie photo d'Elfling
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 poser de problème).
Edit: dans PHP, vous devez le transmettre (imagick::COMPOSITE_DSTIN
) en tant que paramètre dans compositeimage . D'autres filtres dans Constantes d'opérateur composites peuvent également vous être utiles.