module inscription newsletter haut de page forum mobile

Rejeter la notice

formations etalonnage sur davinci resolve

Nos Formations Etalonnage avec Forest reviennent en octobre !
Adoptez une réelle méthodologie d'étalonnage professionnelle et atteignez vos objectifs créatifs avec nos formations intensives sur 3 jours
Toutes les infos
Rejeter la notice

ateliers live resolve avec forest

Ateliers Live Resolve - Formez-vous en ligne tous les mois avec Forest !
Faites rapidement évoluer la qualité de vos étalonnage avec nos ateliers mensuels de 3h.
Toutes les infos
Rejeter la notice

Formation Lumière - Pratique Intensive du 14 au 16 octobre à Paris
Formez-vous avec cet atelier de pratique intensive dans des conditions exceptionnelles ! Formation finançable.
Toutes les infos

Ateliers et Formations

Du traitement d'image... avec PHP5!

Discussion dans 'Effets spéciaux visuels' créé par Julien W., 3 Août 2004.

  1. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Cet après-midi, je m'embêtais un peu. Et oui, ça arrive parfois.
    C'est alors que, surfant sur le net, je tombe sur la documentation de la libraire GD de PHP. Cette libraire fournit des fonctions sommaires pour traiter les images avec PHP.
    Je connaissais depuis un bout de temps, mais je n'avais jamais eu l'occasion de l'utiliser réellement. C'est alors que je me suis dit: est-il possible de réaliser un incrusateur chromatique avec cette librairie?
    Je me plonge donc dans la documentation, mais je constate malheureusement qu'il n'y a pas beaucoup de fonctions pour le traitement d'image. On peut ouvrir une image, en créer une, dessiner un cercle ou écrire un texte, mais rien de bien spécial.
    Mais je tombe sur deux fonctions, mises à part car sûrement peu utilisées par les dévellopeurs. L'une permet de donner les valeurs RGB en un point donné, et l'autre permet de créer un pixel d'une certaine couleur à un point donné.
    N'est-ce pas tout ce dont j'ai besoin?
    Il suffit de balayer l'image, pixel par pixel, de regarder leur valeur, de la comparer avec une valeur donnée, et de colorier le pixel en noir si elle est proche, ou en blanc si elle est loin. On crée ainsi un masque.
    J'ai donc appliqué ça au plus vite, et après quelques heures j'ai réussi à avoir quelque chose qui marchait!
    Mais nous avons là un incrustateur binaire... c'est soit opaque, soit transparant. J'aimerais pouvoir gérer la semi-transparance.
    Je crée donc deux tolérances. Un dégradé est créé entre les deux tolérances, qui va du blanc au noir. Il suffit, avec une simple règle de trois, de définir le niveau de gris en fonction de la position de la valeur du pixel dans ce dégradé. Simple non? Et ça marche!


    EDIT: j'ai supprimé tout les bouts de code de ce sujet... ça le rendait complètement illisible :)

    EDIT2: j'ai renommé le sujet pour qu'il corresponde plus avec le sujet de la discussion!
     
    #1 Julien W., 3 Août 2004
    Dernière édition: 25 Août 2004
  2. taquinade

    taquinade Conseiller Technique Effets Spéciaux & After Effec

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 001
    Appréciations:
    +0 / 0 / -0
    :D

    Ce mec est completement barge ! !

    :lol:
     
  3. Alexking

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    75
    Appréciations:
    +0 / 0 / -0
    Ouep c'est ce que je me disais aussi.
     
  4. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Bon... vous avez peut-être remarqué que je n'étais pas très présent ces derniers temps.
    En fait, j'ai adapté mon script à un script PHP-GTK. Pour ceux à qui ce nom ne signifie rien, il s'agit d'une adaptation du GTK pour PHP. Le GTK étant un module bien connu dans le monde du C, C++, etc. permettant de créer des interfaces graphiques.
    De plus, ce module rend PHP indépendant de serveurs. Donc il s'agit tout à fait d'un système permettant d'exécuter un script PHP sur votre ordinateur (qu'il tourne sous Windows, MacOS ou Linux) avec une interface graphique, sans aucun serveur (Apache ou autre).

    Je pense que quelques screenshots vous expliqueront mieux de quoi il en retourne.

    http://membres.lycos.fr/geekftp/temp/screenshots/1.gif
    Voici à quoi ressemble le programme une fois démarré.

    http://membres.lycos.fr/geekftp/temp/screenshots/2.gif
    Nous avons spécifié de faire un rendu du fichier nodes3.php en mode linéaire.

    http://membres.lycos.fr/geekftp/temp/screenshots/2b.gif
    Une fois le rendu terminé, une nouvelle fenêtre s'affiche avec le résultat.

    http://membres.lycos.fr/geekftp/temp/screenshots/3.gif
    Nous avons maintenant sélectionné le fichier nodes2.php, avec une sauvegarde du résultat...
    [/IMG]
    ... qui est le suivant.

    http://membres.lycos.fr/geekftp/temp/screenshots/dos.gif
    Nous avons aussi la possibilité de suivre le déroulement des opérations depuis l'invite de commandes.

    Maintenant il faut que je vous montre à quoi ressemble les fichiers nodes.php
    Pas besoin de véritables connaissances en programmation; il s'agit en fait d'une représentation plutôt barbare de noeuds.

    Le fichier nodes2.php se présente comme ceci:
    Code:
    $comp = new image("302","481");
    
    $comp->input("C:\Program Files\foreground.png","foreground");
    $comp->input("C:\Program Files\background.png","background");
    
    $comp->merge("foreground","background","result","opacity","50");
    
    $comp->render("result");
    On crée tout d'abord une nouvelle composition, puis on importe deux images. On donne un nom à ces deux images (foreground et background).
    Puis on utilise la fonction "merge", en spécifiant le nom des deux "layers", le nom du layer qui résultera de l'opération, la fonction (ici opacity, mais on aurait pu utilisé Add (qui réagit parfaitement en mode linéaire), Screen, Multiply, Color, ...). Le dernier paramètre siginfiant 50%.
    Puis on effectue un rendu du layer "result".
    Ce fichier est, en fait, l'équivalent d'un projet. Une fois le projet créé, on utilise le programme pour en faire un rendu.

    Il s'agit là d'un projet simple. Pleins d'autres noeuds sont disponibles (desaturate, RGBToYUV, invert, matte, mono, etc.). Il est bien entendu possible de les combiner à l'infini.
     
    #4 Julien W., 21 Août 2004
    Dernière édition: 25 Août 2004
  5. Alexking

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    75
    Appréciations:
    +0 / 0 / -0
    Bravo :bravo: :bravo: :bravo:

    Impressionant!
     
  6. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Merci :D
    La prochaine chose que j'essayerai de faire c'est un générateur de fichiers nodes.php... Même si c'est pas compliqué de les faire à la main, une inferface graphique serait plus agréable :)
     
  7. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Une petite vidéo de démonstration (elle date de hier, depuis j'ai ajouté pas mal de trucs et la gestion de l'alpha est beaucoup plus claire).
    http://www.firestorm77.com/xizor/phpcomp.mov

    Comme vous pouvez le voir, le générateur de fichiers "nodes" est fonctionnel. Plus besoin de devoir se plonger dans du code.
    Hé, c'est presque utilisable par tout le monde maintenant :)

    Il me reste encore à donner la possibilité d'ouvrir un fichier "nodes". Mais c'est assez compliqué, je ne sais pas si j'y arriverai.
     
  8. taquinade

    taquinade Conseiller Technique Effets Spéciaux & After Effec

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 001
    Appréciations:
    +0 / 0 / -0
    [​IMG]

    Bravo !

    [​IMG]
     
  9. Doigtscarrés

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    213
    Appréciations:
    +0 / 0 / -0
    Joignons-nous à Taquinade

    Bravo!!

    [​IMG]

    [​IMG]
     
  10. Alexking

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    75
    Appréciations:
    +0 / 0 / -0
    Ouais ben comme je l'ai dit plus haut:

    TRES IMPRESSIONANT!!!:)
     
  11. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Merci pour ces commentaires :)

    Malheureusement le procédé que j'utilise pour gérer les images n'est pas assez flexible. Lors d'opérations complexes, j'ai des problèmes avec des valeurs qui sortent des limites (en dessous de 0 et en dessus de 255). Si je les "coupe", j'ai d'autres problèmes par la suite.
    Ce que je vais essayer de faire c'est du floating point, c'est à dire d'exprimer les images entre 0 et 1, il y a une infinité de valeurs... bien plus précis!
    Mais je ne peux plus stocker les images provenant des différentes étapes dans des images temporaires comme je le fais actuellement... Faut que je trouve une autre solution, comme les stocker dans des tableaux. Le problème c'est que ces tableaux seraient très complexes, et que je ne sais pas trop comment ils réagiront aux opérations mathématiques (comme des matrices?)...
    J'aimerais bien bosser dessus mais je suis en train de créer un système de discussion en direct (style IRC) basé sur des bases de données MySQL.
    On verra où j'en serais dans quelques jours :)


    EDIT: Bon... j'ai commencé à tout réécrire. Maintenant tout les calculs seront fait en floating point (c'est à dire avec des valeurs entre 0 et 1, au lieu de 0 et 255). C'est bien plus précis... Mais bien plus lent!
    En plus, le code gère une sorte de HDR. C'est à dire que si, par exemple, on a quelque chose de presque blanc sur une image, disons 0.9, et on ajoute avec une opération 0.3 (ça peut arriver, avec un transfert "Ajouter", avec une une correction gamma, etc.), la valeur 1.2 sera stockée jusqu'à la fin.
    Il n'y a pas de "clipping" entre deux opérations... c'est très efficace si par exemple on augmente la luminosité au début, puis à la fin on la diminue. On ne perd aucune information (alors que si les valeurs étaient coupées lorsqu'elles dépassaient 0 ou 1, on en perderait).
    La gestion de l'image en linéaire est également améliorée. On peut convertir une image n'importe quand, alors qu'avant on ne pouvait que choisir entre les convertir toutes ou aucunes au moment de l'import.
    Bref... je pense que cette nouvelle version sera bien plus efficace. Mais aussi plus lente... un peu moins d'une minute de rendu pour un mode de transfert "Ajouter" en linéaire :D
     
    #11 Julien W., 25 Août 2004
    Dernière édition: 25 Août 2004
Chargement...

Partager cette page

Vous souhaitez annoncer sur le Repaire ? Contactez-nous