Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Imagick
Imagick Forum d'entraide pour l'extension Imagick permettant de manipuler des images en PHP (port de l'API ImageMagick).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2007, 09h38   #1
Membre éprouvé
 
Avatar de calogerogigante
 
Inscription : avril 2003
Messages : 600
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Belgique

Informations forums :
Inscription : avril 2003
Messages : 600
Points : 451
Points : 451
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.
__________________
L'informatique vous fait gagner du temps, à condition d'en disposer suffisamment !
Calogero GIGANTE
calogerogigante est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 16h41   #2
Membre éprouvé
 
Avatar de calogerogigante
 
Inscription : avril 2003
Messages : 600
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Belgique

Informations forums :
Inscription : avril 2003
Messages : 600
Points : 451
Points : 451
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 :
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 ?
__________________
L'informatique vous fait gagner du temps, à condition d'en disposer suffisamment !
Calogero GIGANTE
calogerogigante est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h11.


 
 
 
 
Partenaires

Hébergement Web