2015-02-24 2 views

Répondre

0

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.

enter image description here

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 

enter image description here

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

Hey, merci pour cette réponse mais pourriez-vous m'aider avec la conversion PHP? J'utilise le code suivant exec ('C:/Program Files/ImageMagick-6.9.0-Q16/convertir Naamloos-1.gif naamloos.jpg -fx "ur <0.1 && ug <0.1 && u.b <0.1? V : u "out.png"); Mais cela ne fonctionnera pas – Keith666

+0

Quel est le message d'erreur?Et pouvez-vous l'obtenir à l'invite de commande (en dehors de PHP)? –

+0

GET http: //localhost/Image/out.png 404 (Non trouvé) – Keith666