PHP 8.4.22 Released!

Traitement des images (ImageMagick)

Introduction

Avertissement

Cette extension est EXPERIMENTALE. Le comportement de cette extension, les noms de ses fonctions, et toute la documentation autour de cette extension peut changer sans préavis dans une prochaine version de PHP. Cette extension doit être utilisée à vos risques et périls.

Imagick est une extension PHP native permettant de créer et de modifier des images en utilisant l'API ImageMagick.

À propos d'ImageMagick

ImageMagick est une suite de logiciels permettant la création, l'édition et la composition d'images bitmap. Elle peut lire, convertir et écrire des images dans divers formats (plus d'une centaine) dont DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG et TIFF.

ImageMagick Studio LLC est une organisation à but non lucratif dont la vocation est de rendre librement disponibles des solutions logicielles de traitement d'images.

add a note

User Contributed Notes 3 notes

up
16
mlong-php at mlong dot us
18 years ago
Here is an example on how to take an image that is already in a string (say, from a database), and resize it, add a border, and print it out. I use this for showing reseller logos

  // Decode image from base64
  $image=base64_decode($imagedata);

  // Create Imagick object
  $im = new Imagick();

  // Convert image into Imagick
  $im->readimageblob($image);

  // Create thumbnail max of 200x82
  $im->thumbnailImage(200,82,true);

  // Add a subtle border
  $color=new ImagickPixel();
  $color->setColor("rgb(220,220,220)");
  $im->borderImage($color,1,1);

  // Output the image
  $output = $im->getimageblob();
  $outputtype = $im->getFormat();

  header("Content-type: $outputtype");
  echo $output;
up
0
Eero Niemi (eero at eero dot info)
18 years ago
To load image (usually vector image, like PDF) with larger resolution than image's default is, you have to set resolution before reading the file, like this:

<?php
$im = new Imagick(); 
$im->setResolution( 300, 300 ); 
$im->readImage( "test.pdf" );
?>
up
-1
carlosvanhalen7 at gmail dot com
13 years ago
Here's a handy function that finds the first occurrence of a specific pixel. You can set the tolerance of the color you are looking for, or set it to 0 if want an exact match

<?php

function findPixel($img, $r, $g, $b, $tolerance=5)
{
    $original_                 = new Imagick($img);
    $height                    = 0;
    $width                    = 0;
    list($width, $height)    = getimagesize($img);
    $matrix_org                = array();
    $matrix_mrk                = array();

    for( $x = 0 ; $x < $width ; $x++){
        $matrix_org[$x]            = array();
        $matrix_mrk[$x]            = array();
    }

    for( $x = 0 ; $x < $width ; $x++ )
    {
        for( $y = 0 ; $y < $height ; $y++ ){
            $matrix_org[$x][$y]                = $original_->getImagePixelColor($x, $y)->getColorAsString();
            $colors                         = preg_replace('/[^-,0-9+$]/', '', $matrix_org[$x][$y]); 
            $colors                            = explode(',', $colors);
            $r_org                            = $colors[0];
            $g_org                            = $colors[1];
            $b_org                            = $colors[2];
            
            if(     ( $r <= ($r_org+$tolerance) && $r >= ($r_org - $tolerance) ) 
                &&  ( $g <= ($g_org+$tolerance) && $g >= ($g_org - $tolerance) ) 
                &&  ( $b <= ($b_org+$tolerance) && $b >= ($b_org - $tolerance) ) )
            {
                return array( $x, $y );
            }
        }
    }

    return false;
}

?>
To Top