PHP 5.4.33 Released

Imagick::distortImage

(PECL imagick 2.0.1)

Imagick::distortImageDéforme une image avec différentes méthodes

Description

bool Imagick::distortImage ( int $method , array $arguments , bool $bestfit )

Déforme une image en utilisant différentes méthodes, en associant des couleurs de l'image source à celle d'une image de destination, généralement de la même taille, à moins que l'argument bestfit soit configuré à TRUE.

Si bestfit est activé, et que la déformation le permet, l'image de destination est ajusté pour s'assurer que toute l'image source va tenir dans l'image de destination, qui sera redimensionnée et repositionnée en fonction. De plus, dans de nombreux cas, la position virtuelle de l'image sera prise en compte dans l'association.

Cette méthode n'est disponible que si Imagick a été compilé avec ImageMagick version 6.3.6 ou supérieur.

Liste de paramètres

method

La méthode de déformation de l'image. Voyez les constantes de déformation

arguments

Les arguments de cette méthode de déformation

bestfit

Tentative de redimensionnement de l'image de destination pour s'assurer de la taille

Valeurs de retour

Returns TRUE on success.

Erreurs / Exceptions

Lance une exception ImagickException si une erreur survient.

Exemples

Exemple #1 Exemple avec Imagick::distortImage()

Déformation d'une image, et affichage sur le navigateur.

<?php
/* Crée un nouvel objet */
$im = new Imagick();

/* Crée un nouveau motif d'échiquier */
$im->newPseudoImage(100100"pattern:checkerboard");

/* Configure l'image en PNG */
$im->setImageFormat('png');

/* Remplit la nouvelle zone visible à transparent */
$im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);

/* Active le mate */
$im->setImageMatte(true);

/* Contrôle les points de déformation */
$controlPoints = array( 1010
                        
105,

                        
10$im->getImageHeight() - 20,
                        
10$im->getImageHeight() - 5,

                        
$im->getImageWidth() - 1010,
                        
$im->getImageWidth() - 1020,

                        
$im->getImageWidth() - 10$im->getImageHeight() - 10,
                        
$im->getImageWidth() - 10$im->getImageHeight() - 30);

/* Effectue la déformation */                       
$im->distortImage(Imagick::DISTORTION_PERSPECTIVE$controlPointstrue);

/* Envoie l'image */
header("Content-Type: image/png");
echo 
$im;
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Affichage de l'exemple : Utilisation de Imagick::distortImage()

Voir aussi

add a note add a note

User Contributed Notes 2 notes

up
4
DJ Mike
3 years ago
Affine

<?php
$image
= new imagick( "opossum.jpg" );
$points = array(
               
0,0, 25,25,  
              
100,0, 100,50
              
);
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImageImagick::DISTORTION_AFFINE, $points, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>

Affine Projection

<?php
$image
= new imagick( "opossum.jpg" );
$points = array( 0.9,0.3,
                -
0.2,0.7,
                
20,15 );
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImage( Imagick::DISTORTION_AFFINEPROJECTION, $points, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>

Arc

<?php
$image
= new imagick( "opossum.jpg" );
$draw = new imagickdraw();
$degrees = array( 180 );
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImage( Imagick::DISTORTION_ARC, $degrees, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>

Rotated Arc

<?php
$image
= new imagick( "opossum.jpg" );
$draw = new imagickdraw();
$degrees = array( 180, 45, 100, 20 );
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImage( Imagick::DISTORTION_ARC, $degrees, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>

Bilinear

<?php
$image
= new imagick( "opossum.jpg" );
$points = array(
               
0,0, 25,25, # top left 
               
176,0, 126,0, # top right
               
0,135, 0,105, # bottom right
               
176,135, 176,135 # bottum left
               
);
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImage( Imagick::DISTORTION_BILINEAR, $points, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>

Perspective

<?php
$image
= new imagick( "opossum.jpg" );
$points = array(
               
0,0, 25,25, # top left 
               
176,0, 126,0, # top right
               
0,135, 0,105, # bottom right
               
176,135, 176,135 # bottum left
               
);
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImage( Imagick::DISTORTION_PERSPECTIVE, $points, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>

Scale Rotate Translate

<?php
$image
= new imagick( "opossum.jpg" );
$points = array(
                
1.5, # scale 150%
                
150 # rotate
              
);
$image->setimagebackgroundcolor("#fad888");
$image->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );
$image->distortImage( imagick::DISTORTION_SCALEROTATETRANSLATE, $points, TRUE );
header( "Content-Type: image/jpeg" );
echo
$image;
?>
up
0
ashokmca.g at gmail dot com
3 years ago
Slide image with shadow using distortImage

<?php

$slideValue
= 150;

// Create new object
$im = new Imagick("grnhrs.jpg");

// Resize
$im->thumbnailImage(500,400);

// Set the image format to png
$im->setImageFormat('png');

//Clone the current object
$shadow = $im->clone();

//Set image background color to black (this is the color of the shadow)
$shadow->setImageBackgroundColor( new ImagickPixel( 'black' ) );

//Create the shadow
$shadow->shadowImage( 80, 10, 5, 5 );

// Fill background area with transparent for image
//VIRTUALPIXELMETHOD_TRANSPARENT
$im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_ TRANSPARENT);

// Activate matte
$im->setImageMatte(true);

//Control points for the distortion
$controlPoints = array( 0, 0,
                       
$slideValue, 0,
                       
                       
0, $im->getImageHeight(),
                       
0, $im->getImageHeight(),
                       
                       
$im->getImageWidth(), 0,
                       
$im->getImageWidth(), 0,
                       
                       
$im->getImageWidth(), $im->getImageHeight(),
                       
$im->getImageWidth()-$slideValue, $im->getImageHeight());
                       
// Perform the distortion
$im->distortImage(Imagick::DISTORTION_PERSPECTIVEPROJECTION, $controlPoints, true);

// Perform the distortion in shadow image
$shadow->distortImage(Imagick::DISTORTION_PERSPECTIVEPROJECTION, $controlPoints, true);

// Imagick::shadowImage only creates the shadow.
// That is why the original image is composited over it
$shadow->compositeImage( $im, Imagick::COMPOSITE_OVER, 0, 0 );

/* Ouput the image */
header("Content-Type: image/png");
echo
$shadow;

?>
To Top