IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[ImageMagick] Transformation inhabituelle d'image (perspective)


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut [ImageMagick] Transformation inhabituelle d'image (perspective)
    Voilà, pour les besoins d'une mise en perspective d'une image au sein d'une autre image, je dois transformer une image carrée ou rectangulaire en une autre image dont un seul côté latéral a été agrandit : mieux que des phrases, voici en image un exemple de ce que je dois faire...



    J'ai vaguement l'impression qu'il va falloir que je passe par des procédés matriciels pour induire une telle transformation.

    Mon problème : je ne sais pas par où commencer, et comment fonctionne les transformations matricielles.

    Quelqu'un peut-il me mettre sur la voie ? (tutoriel, exemple similaire, etc...)

    Merci d'avance à celui ou celle qui pourra m'aider...

    [EDIT] : Ce peut être aussi une réduction d'un des deux cotés, plutôt qu'un agrandissement. L'effet obtenu de mise en perspective étant le même.

  2. #2
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Bon, en fouillant les recoins de l'internet, je suis arrivé (en collant des bouts de code par-ci par-là) à créer ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php
    $mon_angle = 45;
     
    header("Content-Type: image/png");
    imagepng( imageperspective("jessica.png", $mon_angle) );
    exit();
     
    function imageperspective($pImage, $angle)
    {
      // image source
      $iSource = ImageCreateFromPng($pImage);
     
      // image de destination : iCanvas
      list($largeur, $hauteur, $type, $attr) = getimagesize($pImage);
     
      // on crée l'image en vraies couleurs :
      $iCanvas = @imagecreatetruecolor($largeur, $hauteur);
      // on assigne une transparence
      $transparence = imagecolorallocatealpha( $iCanvas, 0, 0, 0, 127);
      // on demande de garder la particularité de transparence
      imageSaveAlpha($iCanvas, true);
      // on remplit l'image avec cette transparence :
      imagefill($iCanvas, 0, 0, $transparence);
     
      // on calcule la différence de pixels :
      $diff = ($angle / 90);
     
      // boucle sur chaque largeur de pixel :
      $currentHeight = $hauteur;
      $currentY = 0;
      for ($i = 0; $i < $largeur; $i++)
        {
        // on prends un bout d'image de (1px x hauteur) et on
        // le copie dans iCanvas
        imagecopyresampled($iCanvas, $iSource, $i, $currentY, $i, 0,
                                               1, $currentHeight, 1, $hauteur);
     
        // on modifie la prochaine hauteur ;
        $currentHeight = $currentHeight - $diff;
        $currentY = ($hauteur - $currentHeight);
        }
     
      // on retourne l'image :
      return $iCanvas;
    }
    ?>
    Il transforme une image PNG, celle-ci par exemple :

    http://www.gigante.be/divers/jessica.png

    en ceci :



    J'ai du chipoter pour gérer la transparence et la garder...

    Mais je me demande s'il n'y a pas moyen de faire plus simple encore ?
    Et surtout, en améliorant l'aspect perspective non plus des bords de l'image, mais aussi du contenu (que l'image donne comme une impression de fuite...)

    Quel algorithme faut-il utiliser pour ça ?

Discussions similaires

  1. [ImageMagick] Affichage d'une image png
    Par JavaAcro dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 06/02/2006, 09h13
  2. [ImageMagick] Création d'une image miniature
    Par popeye82 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 01/02/2006, 20h10
  3. [ImageMagick] Redimensionnement d'image
    Par GTJuanpablo dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 05/01/2006, 14h05
  4. [ImageMagick] Création de vignettes (images réduites)
    Par tom06440 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 22/10/2005, 15h00
  5. [ImageMagick] Comment générer une image d'un code à entrer ?
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 16/01/2005, 21h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo