J'ai une image png transparente "foo.png" et j'ai ouvert une autre image avec
im = Image.open("foo2.png");
maintenant ce dont j'ai besoin est de fusionner foo.png avec foo2.png.
(foo.png contient du texte et je veux imprimer ce texte sur foo2.png)
;
à la fin de vos commandes en python: c'est moche ...Réponses:
Le premier paramètre à
.paste()
est l'image à coller. Deuxièmement, les coordonnées et la sauce secrète est le troisième paramètre. Il indique un masque qui sera utilisé pour coller l'image. Si vous passez une image avec transparence, alors le canal alpha est utilisé comme masque.Consultez les documents .
la source
foreground.convert('RGBA')
pour le paramètre de masque.ValueError: bad transparency mask
ValueError: bad transparency mask
utilisationbg.paste(fg, (0, 0), fg.convert('RGBA'))
Image.paste
ne fonctionne pas comme prévu lorsque l'image d'arrière-plan contient également de la transparence. Vous devez utiliser un véritable Alpha Compositing .Pillow 2.0 contient une
alpha_composite
fonction qui fait cela.EDIT: Les deux images doivent être de type RGBA. Vous devez donc appeler
convert('RGBA')
si elles sont palettisées, etc. Si l'arrière-plan n'a pas de canal alpha, vous pouvez utiliser la méthode de collage classique (qui devrait être plus rapide).la source
ValueError: image has wrong made
aussi @DenizOzgerComme olt l'a déjà souligné,
Image.paste
ne fonctionne pas correctement, lorsque la source et la destination contiennent toutes deux alpha.Considérez le scénario suivant:
Deux images de test, toutes deux contiennent de l'alpha:
Image de composition en utilisant
Image.paste
comme ceci:produit l'image suivante (la partie alpha des pixels rouges superposés est entièrement extraite du 2ème calque. Les pixels ne sont pas fusionnés correctement):
Image de composition en utilisant
Image.alpha_composite
comme ceci:produit l'image suivante (correcte):
la source
alpha_composite
ne pouvez pas définir le décalage, pourriez-vous donner un exemple pour remplacer complètement lapaste
fonction?On peut également utiliser le mélange:
la source
la source
Avait une question similaire et avait du mal à trouver une réponse. La fonction suivante vous permet de coller une image avec un paramètre de transparence sur une autre image à un décalage spécifique.
la source
ValueError: images do not match
J'ai fini par coder moi-même la suggestion de ce commentaire faite par l'utilisateur @ P.Melch et suggérée par @Mithril sur un projet sur lequel je travaille.
J'ai également codé la sécurité hors limites, voici le code pour cela . (J'ai lié un commit spécifique car les choses peuvent changer dans le futur de ce référentiel)
Remarque: J'attends des tableaux numpy des images comme
np.array(Image.open(...))
les entrées A et Bcopy_from
et cesoverlay
arguments de fonction liés .Les dépendances sont la fonction juste avant elle, la
copy_from
méthode et les tableaux numpy en tant que contenu d'image PIL pour le découpage.Bien que le fichier soit très orienté classe, si vous souhaitez utiliser cette fonction
overlay_transparent
, assurez-vous de renommer leself.frame
tableau numpy de votre image d'arrière-plan.Ou vous pouvez simplement copier le fichier entier (supprimer probablement certaines importations et la
Utils
classe) et interagir avec cette classe Frame comme ceci:Ensuite, vous avez votre
background.frame
tableau composé superposé et alpha, vous pouvez en obtenir une image PIL avecoverlayed = Image.fromarray(background.frame)
ou quelque chose comme:Ou tout
background.save("save path")
comme cela prend directement de laself.frame
variable interne composée alpha .Vous pouvez lire le fichier et trouver d'autres fonctions de Nice avec cette I mise en œuvre codée comme les méthodes
get_rgb_frame_array
,resize_by_ratio
,resize_to_resolution
,rotate
,gaussian_blur
,transparency
,vignetting
:)Vous voudrez probablement supprimer la
resolve_pending
méthode car elle est spécifique à ce projet.Heureux si je vous ai aidé, assurez-vous de vérifier le repo du projet dont je parle, cette question et ce fil m'ont beaucoup aidé sur le développement :)
la source