Bien sûr, je le fais avec la ligne de commande d'Imagemagick, mais il existe aussi des liaisons PHP. ImageMagick est installé dans la plupart des distors Linux et disponible pour Windows et OS X.
La commande est la suivante:
convert base.gif wallpaper.png -fx "u.r<0.1 && u.g<0.1 &&u.b<0.1? v : u" out.png
en utilisant votre image de base et un papier peint d'une autre question que je répondais.
Fondamentalement, l'opérateur -fx
vous permet de faire votre propre traitement. Donc, je dis que si le canal rouge de l'image originale est inférieur à 10% (c'est-à-dire vraiment sombre), et le vert et le bleu, remplacez le pixel par le pixel correspondant de la deuxième image (papier peint). Les pixels de la première image sont référencés u
et ceux de la deuxième image (papier peint) sont v
. Donc u.r
fait référence à la composante rouge des pixels de la première image.
Vous pouvez obtenir un peu de fantaisie et d'éviter les valeurs aberrantes et les pixels isolés comme sous la porte du réfrigérateur et en bas à gauche de la paroi arrière sur le tapis. Ici, j'introduis une troisième image dans le traitement qui est une copie de l'original, mais je la barre ensuite et filtre médian pour réduire les valeurs aberrantes. La première ligne de la commande correspond à l'image de base, la seconde ligne à l'image de base filtrée et la troisième au papier peint. Je me réfère maintenant aux pixels de l'image de base comme u[0]
, ceux de l'image de base filtrée comme u[1]
et ceux du papier peint comme u[2]
.
convert base.gif \
\(base.gif -depth 8 -threshold 1 -median 3x3 \) \
wallpaper.png \
-fx "u[1].r==0.0 ? u[2]:u[0]" \
out.png
Vous pouvez trouver le lent opérateur -fx
si vous avez beaucoup d'images à faire, pour que vous puissiez continuer comme ça à la place. Faites d'abord un joli masque des zones noires par le seuillage et le filtrage médian pour éliminer les valeurs aberrantes.
convert base.gif -depth 8 -threshold 1 -median 3x3 -negate mask.png
Maintenant prenez le fond d'écran et masque son opacité avec le masque, puis le résultat composite sur l'image de base:
convert wallpaper.png \
mask.png \
-compose copyopacity -composite \
base.gif \
-compose dstover -composite \
result.png
S'il vous plaît être plus précis dans votre question. – razong