Imagick « Mikko’s blog

Beaucoup de tutoriels au sujet d’ImageMagick (Utile pour le plugin doc2img)

http://valokuva.org/?cat=1

Les articles publiés sur le site

  • ImagickPixelIterator is not read-only after all..

    9 juin 2010, par Mikko KoppanenImagick, PHP stuff
    A few days ago I got a help request from a user: "How do you change pixel color during the iteration with ImagickPixelIterator". My initial response was that ImagickPixelIterator is read-only. Well, I have to admit I was wrong. After searching trough ImageMagick docs I stumbled across an (...)
  • Imagick and Gmagick builds available for Windows

    19 septembre 2009, par Mikko KoppanenImagick, PHP stuff

    The new Windows build page http://valokuva.org/magick/ contains builds for both Imagick and Gmagick. All builds are done using VC9 and PHP 5.3.

    ImageMagick builds are QuantumDepth 16 (default).
    GraphicsMagick builds are QuantumDepth 8 (default).

    Please note that these builds won’t work with the official PHP.net binaries which are compiled using VC6.

    Edit: Pierre corrected me that there are official VC9 builds of PHP available at http://windows.php.net/download/

  • Imagick and Gmagick builds available for Windows

    19 septembre 2009, par Mikko KoppanenImagick, PHP stuff

    The new Windows build page http://valokuva.org/magick/ contains builds for both Imagick and Gmagick. All builds are done using VC9 and PHP 5.3.

    ImageMagick builds are QuantumDepth 16 (default).
    GraphicsMagick builds are QuantumDepth 8 (default).

    Please note that these builds won’t work with the official PHP.net binaries which are compiled using VC6.

    Edit: Pierre corrected me that there are official VC9 builds of PHP available at http://windows.php.net/download/

  • Perspective transformations

    4 février 2009, par Mikko KoppanenImagick, PHP stuff

    Finally (after a long break) I managed to force myself to update the PHP documentation and this time it was distortImage code example. Things have been hectic lately but that does not quite explain the 6 months(?) break between this and the previous post. As a matter of a fact there is no excuse for such a long silence so I will try to update this blog a bit more often from now on.

    Back in the day I used to blog the examples and update the documentation if I remembered but I am trying to fix this bad habit. Most of the latest examples have been updated in to the manual. In the case of the two last examples I updated the documentation first and then blogged on the subject.

    I took some time to actually understand the perspective transformations properly using the excellent ImageMagick examples (mainly created by Anthony Thyssen) as a reference. The basic idea of perspective distortion seems simple: to distort the control points to new locations. Grabbing the syntax for Imagick was easy, an array of control point pairs in the form of:

    1. array(source_x, source_y, dest_x, dest_y ... )

    The following example uses the built-in checkerboard pattern to demonstrate perspective distortion:

    1. <?php
    2. /* Create new object */
    3. $im = new Imagick();
    4.  
    5. /* Create new checkerboard pattern */
    6. $im->newPseudoImage(100, 100, "pattern:checkerboard");
    7.  
    8. /* Set the image format to png */
    9. $im->setImageFormat('png');
    10.  
    11. /* Fill background area with transparent */
    12. $im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
    13.  
    14. /* Activate matte */
    15. $im->setImageMatte(true);
    16.  
    17. /* Control points for the distortion */
    18. $controlPoints = array( 10, 10,
    19.                         10, 5,
    20.  
    21.                         10, $im->getImageHeight() - 20,
    22.                         10, $im->getImageHeight() - 5,
    23.  
    24.                         $im->getImageWidth() - 10, 10,
    25.                         $im->getImageWidth() - 10, 20,
    26.  
    27.                         $im->getImageWidth() - 10, $im->getImageHeight() - 10,
    28.                         $im->getImageWidth() - 10, $im->getImageHeight() - 30);
    29.  
    30. /* Perform the distortion */  
    31. $im->distortImage(Imagick::DISTORTION_PERSPECTIVE, $controlPoints, true);
    32.  
    33. /* Ouput the image */  
    34. header("Content-Type: image/png");
    35. echo $im;
    36. ?>

    Here is the source image:
    checker before

    And the result:
    after

  • Fill patterns

    26 avril 2008, par Mikko KoppanenImagick, PHP stuff

    My work life has been quite busy lately and I haven’t had a chance to sit down and blog. I have been touring around London and some parts of the northern England consulting and organizing some training here and there. Luckily I have had the chance to do some work on Imagick and the 2.2.0 beta release is getting closer. The internal structure was completely restructured and broken down into several smaller files. During this time Imagick was adapted to follow the PHP Coding Standards more closely. Still a work in progress :)

    I committed slightly modified version of this example to PHP Manual http://uk.php.net/manual/en/imagick.examples.php page a few days ago. The example illustrates using an image as a part of a named fill pattern. The fill pattern is used to annotate text but the named pattern could also be used to fill any shapes that allow fill to be specified (include circles, ellipses, rectangles, polygons etc etc). The code itself is pretty straight forward: Read the image, create the pattern and use the pattern as a fill.

    The ice formations image is from http://www.photoeverywhere.co.uk/west/winterholiday/slides/iceformations5679.htm.

    1. <?php
    2.  
    3. /* Create a new imagick object */
    4. $im = new Imagick( 'iceformations5679.JPG' );
    5.  
    6. /* Create imagickdraw object */
    7. $draw = new ImagickDraw();
    8.  
    9. /* Start a new pattern called "ice" */
    10. $draw->pushPattern( 'ice'  , 0  , 0  , 50  , 50 );
    11.  
    12. /* Composite the image on the pattern */
    13. $draw->composite( Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im );
    14.  
    15. /* Close the pattern */
    16. $draw->popPattern();
    17.  
    18. /* Use the pattern called "ice" as the fill */
    19. $draw->setFillPatternURL( '#ice' );
    20.  
    21. /* Set font size to 52 */
    22. $draw->setFontSize( 52 );
    23.  
    24. /* Annotate some text */
    25. $draw->annotation( 5, 50, "Hello World!" );
    26.  
    27. /* Create a new canvas and white image */
    28. $canvas = new Imagick();
    29. $canvas->newImage( 310, 70, "white" );
    30.  
    31. /* Add black border around the resulting image */
    32. $canvas->borderImage( 'black', 1, 1 );
    33.  
    34. /* Draw the ImagickDraw on to the canvas */
    35. $canvas->drawImage( $draw );
    36.  
    37. /* Set the format to PNG */
    38. $canvas->setImageFormat( 'png' );
    39.  
    40. /* Output the image */
    41. header( "Content-Type: image/png" );
    42. echo $canvas;
    43. ?>

    And the result is here: