cant get it to work on linux

MagickWand for PHP is an object-oriented PHP interface to ImageMagick. Use this forum to discuss, make suggestions about, or report bugs concerning MagickWand for PHP.
Post Reply
bbunlock
Posts: 8
Joined: 2006-06-04T08:39:46-07:00
Location: England

cant get it to work on linux

Post by bbunlock »

ok folks im having major headaches with this thing, I have installed imagemagick no and it works, done a couple of test via the ssh command line and created the logo.

I have compiled php with magic wand and followed all instuctions in the install file and still no joy, I have comiled php at least a dozen time over the last 2 days and its just not working no matter what I do, I have changed the --with-magickwand= to lots of different locations and all end up the same result not working, the paths I have used have been /usr/local/bin, /usr/local, /usr, /usr/bin etc etc and like I said still no joy getting it to work.

I am using a script I found on the internet which is from what I am told the script that was supposed to be included with the zip of magickwand but wasnt.

I have heard people mention the php.ini file and other say move magickwand.so to this folder and to that folder and I have done all that but still not getting anything to work, ok to runn down what I have done.

installed imagemagick to /usr folder using the --prefix-/usr, reason for this is that had old version of image magic in that folder and when I did the convert -version it showed the old version not the 6.2.7 that I installed.

installed magickwand to the php source folder (.usr/local/src/php-4.4.1/ext/magickwand), ran phpize in that folder then ./configure and then "make" and then "make install", did that also without the make and make install as they wernt in the original install guide but saw on this forum to try it.

then compiled php from source folder above with all loads of different destination folders, the build went ok and a file on my sstem phpinfo shows that magickwand installed in the config with the locations I pointed to.

compiled php with make and then make install, php installed no problem.

so I seem to have done everything I can think of to get this thing working over nearly 2 days but its just not having it.

the test file I am using to check if it is installed is below

Code: Select all

<?php

/*
* MagickWand for PHP :: Demonstration program
*
* Author: Ouinnel Watson
* Date: December 2004
*
* WARNING
*   By installing and executing this script, you accept any and all
*   responsibility for any and all damages of any kind which occur as
*   a result of the installation and/or operation of this script, and
*   agree to indemnify the author (Ouinnel Watson) against any liability
*   and/or responsibility for any and all damages resulting from the
*   installation, execution or operation of this script.
*
* Description: The following script demonstrates the inate capabilities of
*              MagickWand for PHP by creating an animated GIF.
*              MagickWand for PHP capabilities used:
*              1) vector drawing (shapes, text, colors)
*              2) default font
*              3) unique color model
*              4) addition of random noise
*              5) several special effects methods
*              6) setting of single frame display time
*              7) and much more...
*/

/* General Settings */

$noise_frames = 5; /* The amount of frames/images of random noise to be
                      created at the start of the animation */
$noise_delay = 20; /* The length of time (in hundredth's of a second) that
                      each noisy frame will be displayed */

$cnt_down_start = 3; /* The starting number of the countdown */
$cnt_down_delay = 50; /* The length of time (in hundredth's of a second) that
                      each countdown frame will be displayed */

$width = 140; /* The width of each frame in the animation */
$height = 70; /* The height of each frame in the animation */

$x_int = $width / 10; /* The distance, along the x axis, between the edges
                         of the various rounded rectangles to be drawn */
$y_int = $height / 10; /* The distance, along the y axis, between the edges of
                          the various rounded rectangles to be drawn */

$x1 = $x_int; /* The x ordinate of the top-left corner of the bounding
                 rectangle in which the first rounded rectangle will be
                 drawn */
$y1 = $y_int; /* The y ordinate of the top-left corner of the bounding
                 rectangle in which the first rounded rectangle will be
                 drawn */

$x2 = $width - $x_int; /* The x ordinate of the bottom-right corner of the
                          bounding rectangle in which the first rounded
                          rectangle will be drawn */
$y2 = $height - $y_int; /* The x ordinate of the bottom-right corner of the
                           bounding rectangle in which the first rounded
                           rectangle will be drawn */

$x_radius = $y_radius = 10; /* The radius of the corners of the rounded rectangles to be
                   drawn */

$font_size = 30; /* The initial text annotation font size in pixels */

$swirl_deg_start = 0; /* The initial degree amount that the last countdown
                         frame will be swirled */
$swirl_deg_end = 360; /* The maximum degree amount that the last countdown
                         frame will be swirled */
$swirl_deg_int = 60; /* The swirl loop degree increment value */
$swirl_delay = 10; /* The length of time (in hundredth's of a second) that
                      each swirled frame will be displayed */

$num_morph_frames = 5; /* The number of intermediary frames between images to
                          be morphed */
$morph_delay = 20; /* The length of time (in hundredth's of a second) that
                      each morphed frame will be displayed */

$logo = 'MagickWand for PHP'; /* The 1st string to be displayed */

$welcome_msg = 'The future awaits...'; /* The 2nd string to be displayed */

$mgck_wnd = NewMagickWand(); /* Create a new MagickWand resource -- "holds"
                                the images */

$bg_color= NewPixelWand(); /* Creates a new PixelWand resource -- contains
                              information on an individual unit of color;
                              opaque black by default */

$white = NewPixelWand('white'); /* Does the same as above, except that the
                                   PixelWand's color is set to white */

$pxl_wnd = NewPixelWand();

$drw_wnd = NewDrawingWand(); /* Creates a new DrawingWand resource -- holds
                                vector drawing commands */

$txt_wnd = NewDrawingWand();

/*
The following loop iterates $noise_frames times, doing the following each
time:
   1) Creates a new image using MagickNewImage()
   2) Adds MW_LaplacianNoise type random noise to the newly created image
   3) Sets the amount of time the image is displayed to $noise_delay
      hundredths of a second, using MagickSetImageDelay()

The user function checkWandError() checks the return type of API functions for
explicit FALSE (via the "===" operator), which indicates an error occurred.
*/
for ($i = 0; $i < $noise_frames; $i++) {

    checkWandError(MagickNewImage($mgck_wnd, $width, $height, $bg_color), $mgck_wnd, __LINE__);

    checkWandError(MagickAddNoiseImage($mgck_wnd, MW_LaplacianNoise), $mgck_wnd, __LINE__);

    checkWandError(MagickSetImageDelay($mgck_wnd, $noise_delay), $mgck_wnd, __LINE__);
}

/* Retrieve the current image from $mgck_wnd in a new MagickWand, and assign
   it to $pre_morph_wnd.
*/
$pre_morph_wnd =& checkWandError(MagickGetImage($mgck_wnd), $mgck_wnd, __LINE__);

/* Set variables to random values between 0 and 255, for use in an
   ImageMagick color string RGB triple (e.g. rgb(255, 255, 255) == white).
*/
$red   = mt_rand(0, 255);
$green = mt_rand(0, 255);
$blue  = mt_rand(0, 255);

/* Use color values from above to form an ImageMagick color string RGB triple,
   and set the $pxl_wnd PixelWand to that color.
*/
checkWandError(PixelSetColor($pxl_wnd, "rgb($red, $green, $blue)"), $pxl_wnd, __LINE__);

/* Set the fill color (the color in which shapes and text will be drawn), to
   $pxl_wnd's color.
*/
DrawSetFillColor($drw_wnd, $pxl_wnd);

/* Add a command to draw a rounded rectangle to the $drw_wnd DrawingWand
   from point ($x1, $y1), the top-left corner of the bounding rectangle
   to ($x2, $y2), (the bottom right corner), with a corner x-axis radius of
   $x_radius, and a corner y-axis radius of $y_radius.
*/
DrawRoundRectangle($drw_wnd, $x1, $y1, $x2, $y2, $x_radius, $y_radius);

/* Create a new image, in $pre_morph_wnd, of $width * $height area, with
   $bg_color (currently a black PixelWand resource) background color, set
   it's display time to $morph_delay, and draw the $drw_wnd DrawingWand on
   the new image.
*/
drawNewImageSetDelay($pre_morph_wnd, $drw_wnd, $width, $height, $bg_color, $morph_delay, __LINE__);

/* Morph the images in $pre_morph_wnd, set their displaytime, and and add
   them to $mgck_wnd.
*/
addMorphedImages($mgck_wnd, $pre_morph_wnd, $num_morph_frames, $morph_delay, __LINE__);

/* Free the resources associated with $pre_morph_wnd, since it is no longer
   needed.
*/
DestroyMagickWand($pre_morph_wnd);

/* Set the current active image, in $mgck_wnd's image squence, to the last image.
*/
MagickSetLastIterator($mgck_wnd);

/* Starting from $i = $cnt_down_start, (with $i being decreased by one at each
   iteration's end), and continuing while $i > 0, and the widths and heights of
   the rounded rectangles to be drawn are greater than the amounts by which
   their sizes are decreased through each iteration,
*/
for ($i = $cnt_down_start; $i > 0 && ($x2 - $x1) >= $x_int && ($y2 - $y1) >= $y_int; $i--) {

    /* Set the PixelWand $pxl_wnd's color to that of the ImageMagick color
       string RGB triple "rgb($red, $green, $blue)", where $red, $green, and
       $blue are numbers between 0 and 255, inclusive.
    */
    checkWandError(PixelSetColor($pxl_wnd, "rgb($red, $green, $blue)"), $pxl_wnd, __LINE__);

    /* Add commands to draw a $pxl_wnd colored rounded rectangle to $drw_wnd */
    DrawSetFillColor($drw_wnd, $pxl_wnd);
    DrawRoundRectangle($drw_wnd, $x1, $y1, $x2, $y2, $x_radius, $y_radius);

    $red   = mt_rand(0, 255);
    $green = mt_rand(0, 255);
    $blue  = mt_rand(0, 255);

    /* Decrease the size of the next rounded rectange to be drawn */
    $x1 += $x_int;
    $y1 += $y_int;

    $x2 -= $x_int;
    $y2 -= $y_int;

    /* Create a new image in $mgck_wnd, and draw $drw_wnd on it */
    drawNewImageSetDelay($mgck_wnd, $drw_wnd, $width, $height, $bg_color, $cnt_down_delay, __LINE__);

    /* Add commands to draw $i in $white colored text $font_size, horizontally
       and vertically centered at relative point (0, 0), (see function
       definition for details), to the $txt_wnd DrawingWand.
    */
    addText($txt_wnd, $white, $font_size, $i);

    /* Draw $txt_wnd on the just created image in the $mgck_wnd MagickWand */
    checkWandError(MagickDrawImage($mgck_wnd, $txt_wnd), $mgck_wnd, __LINE__);

    /* Clear the $txt_wnd DrawingWand of any accumulated commands, and reset the
       settings it contains to their defaults.
    */
    ClearDrawingWand($txt_wnd);
}

/* Add commands to draw $i, (which now holds a value that is 1 less than the
   last $i value drwan in the loop above), in $white at $font_size, to the
   $drw_wnd DrawingWand
*/
addText($drw_wnd, $white, $font_size, $i);

/* Draw $drw_wnd on a new image in $mgck_wnd */
drawNewImageSetDelay($mgck_wnd, $drw_wnd, $width, $height, $bg_color, $swirl_delay, __LINE__);

/* The following loop creates a set of images which, when set as animation
   frames, creates a sort of hurricane effect. 
   
   Starting at $swirl_deg = $swirl_deg_start degrees, and increasing
   $swirl_deg by $swirl_deg_int degrees as long as $swirl_deg is less than or
   equal to $swirl_deg_end, ...
*/
for ($swirl_deg = $swirl_deg_start; $swirl_deg <= $swirl_deg_end; $swirl_deg += $swirl_deg_int) {

    /* create a new image, draw $drw_wnd on it, set its display time to
       $swirl_delay hundredths of a second, ...
    */
    drawNewImageSetDelay($mgck_wnd, $drw_wnd, $width, $height, $bg_color, $swirl_delay, __LINE__);

    /* and perform the swirl special effect on it at $swirl_deg. */
    checkWandError(MagickSwirlImage($mgck_wnd, $swirl_deg), $mgck_wnd, __LINE__);
}

/* Following loop ensures that $font_size is */
while (TRUE) {

    /* Set the text font size used by $txt_wnd to $font_size */
    DrawSetFontSize($txt_wnd, $font_size);

    /* MagickGetStringWidth() returns the width of the specified strings
       ($logo and $welcome_msg), when they are drawn with the settings (font,
       font size, stroke, etc.) of the specified DrawingWand, $txt_wnd.
    */
    $logo_width =& checkWandError(MagickGetStringWidth($mgck_wnd, $txt_wnd, $logo), $mgck_wnd, __LINE__);
    $welcome_msg_width =& checkWandError(MagickGetStringWidth($mgck_wnd, $txt_wnd, $welcome_msg), $mgck_wnd, __LINE__);

    /* If the widths of both strings are within the acceptable limits, end
       the loop.
    */
    if ($logo_width < $width && $welcome_msg_width < $width) {
        break;
    }

    /* Otherwise, decrement the $font_size */
    $font_size--;
}

/* Retrieve the current image from $mgck_wnd in a new MagickWand, and assign
   it to $pre_morph_wnd.
*/
$pre_morph_wnd =& checkWandError(MagickGetImage($mgck_wnd), $mgck_wnd, __LINE__);

/* Add commands to the $txt_wnd DrawingWand to draw the $logo string in $white
   at $font_size, then draw $txt_wnd on a new image in $pre_morph_wnd.
*/
addText($txt_wnd, $white, $font_size, $logo);
drawNewImage($pre_morph_wnd, $txt_wnd, $width, $height, $bg_color, __LINE__);

/* Clear $txt_wnd's command list and reset its settings */
ClearDrawingWand($txt_wnd);

/* Draw $welcome_msg in $white at $font_size on another new image in
   $pre_morph_wnd.
*/
addText($txt_wnd, $white, $font_size, $welcome_msg);
drawNewImage($pre_morph_wnd, $txt_wnd, $width, $height, $bg_color, __LINE__);

/* Add the first image in $mgck_wnd to $pre_morph_wnd. */
MagickSetFirstIterator($mgck_wnd);
checkWandError(MagickAddImage($pre_morph_wnd, $mgck_wnd), $pre_morph_wnd, __LINE__);

/* Morph the images in $pre_morph_wnd and add them to the end of $mgck_wnd's
   image sequence.
*/
addMorphedImages($mgck_wnd, $pre_morph_wnd, $num_morph_frames, $morph_delay, __LINE__);

/* Free the resources associated with $pre_morph_wnd, $drw_wnd and $txt_wnd,
   since they are no longer needed.
*/
DestroymagickWand($pre_morph_wnd);
DestroyDrawingWand($drw_wnd);
DestroyDrawingWand($txt_wnd);

/* Sets the output format of $mgck_wnd's image sequence to GIF */
checkWandError(MagickSetFormat($mgck_wnd, 'GIF'), $mgck_wnd, __LINE__);

/* Retrieves the mime-type associated with $mgck_wnd's image sequence, and
   outputs it in a Content-Type header.
*/
header('Content-Type: ' . MagickGetMimeType($mgck_wnd));

/* Outputs $mgck_wnd's image sequence as a BLOB (Binary Large Object) */
MagickEchoImagesBlob($mgck_wnd);

/* Free the resources associated with $mgck_wnd */
DestroymagickWand($mgck_wnd);


/* ******************** Function Declarations ******************** */

/**
* Function checkWandError() compares the value of $result, which should be
* the result of any MagickWand API function, to explicit FALSE, and if it is
* FALSE, checks if $wand for contains an error condition (in case the API
* function is just returning FALSE as a normal return value).
*
* If the return value is FALSE, and the $wand contains a set error condition,
* the function outputs the error and forcibly ends the program.
*
* If not, returns $result as a reference.
*
* @param mixed       MagickWand API function result
* @param resource    Any MagickWand API resource
* @param int         Always __LINE__ (script current line number predefined
*                        PHP constant)
*
* @return reference  Returns reference to 1st argument (if no errors found)
*/
function &checkWandError(&$result, $wand, $line) {

    if ($result === FALSE && WandHasException($wand)) {
        echo '<pre>An error occurred on line ', $line, ': ', WandGetExceptionString($wand), '</pre>';
        exit();
    }

    return $result;
}

/**
* Function addText() performs several operations on the DrawingWand
* $drw_wnd:
*    1) sets the fill color (the color in which shapes, text, etc. will be
*       drawn) from the PixelWand (or Imagemagick color string) $pxl_wnd with
*       DrawSetFillColor()
*    2) sets the font size of text to be drawn to $font_size, using
*       DrawSetFontSize()
*    3) sets the position where text will be drawn with DrawSetGravity();
*       position is set to MW_CenterGravity by default, which automatically
*       centers text horizontally and vertically
*    4) sets text to be drawn later to $text, which will be drawn at
*       coordinate ($x, $y), (relative to the position indicated by
*       $gravity), with DrawAnnotation()
*
* If no font is set prior to this function being called, the MagickWand API
* uses the default font (seems to be Arial).
*
* @param resource    DrawingWand resource
* @param mixed       PixelWand resource or imagemagick color string
* @param float       desired text font size
* @param float       string to be drawn
* @param int         the desired text gravity, indicating the desired text
*                        position; must be a MagickWand API GravityType
* @param int         x ordinate, relative to the chosen text gravity where
*                        text will be drawn
* @param int         y ordinate, relative to the chosen text gravity where
*                        text will be drawn
*
* @return void       No return value, as all functions used return void.
*/
function addText($drw_wnd, $pxl_wnd, $font_size, $text, $gravity = MW_CenterGravity, $x = 0, $y = 0) {

    /* Set the color used to draw shapes and text with $drw_wnd to $pxl_wnd's
       color
    */
    DrawSetFillColor($drw_wnd, $pxl_wnd);

    /* Set the text font size used by $drw_wnd to $font_size */
    DrawSetFontSize($drw_wnd, $font_size);

    /* Set $drw_wnd text gravity (automatic text positioning setting), to
       $gravity
    */
    DrawSetGravity($drw_wnd, $gravity);

    /* Add a command to the $drw_wnd DrawingWand to draw the $text string at
       point ($x, $y) (relative to $drw_wnd's gravity setting).
    */
    DrawAnnotation($drw_wnd, $x, $y, $text);
}

/**
* Function drawNewImage() creates a new image, using MagickNewImage(), of
* $width * $height area, filled with $bg_color (a PixelWand, or ImageMagick
* color string) color.
*
* It then uses MagickDrawImage() to draw the commands contained in the
* DrawingWand $drw_wnd on the newly reated image.
*
* @param resource    MagickWand resource
* @param resource    DrawingWand resource
* @param int         width of new image
* @param int         height of new image
* @param mixed       PixelWand resource or imagemagick color string
* @param int         Always __LINE__ (script current line number predefined
*                        PHP constant)
*
* @return void
*/
function drawNewImage($mgck_wnd, $drw_wnd, $width, $height, $bg_color, $line) {

    $line = 'program line '.$line.', function line ';

    checkWandError(MagickNewImage($mgck_wnd, $width, $height, $bg_color), $mgck_wnd, $line.__LINE__);
    checkWandError(MagickDrawImage($mgck_wnd, $drw_wnd), $mgck_wnd, $line.__LINE__);
}

/**
* Function drawNewImageSetDelay() calls drawNewImage() to create a new
* image, of $width * $height area, filled with $bg_color color, drawn on by
* DrawingWand $drw_wnd.
*
* It then sets the length of time the new image will be displayed to $delay.
*
* @param resource    MagickWand resource
* @param resource    DrawingWand resource
* @param int         width of new image
* @param int         height of new image
* @param mixed       PixelWand resource or imagemagick color string
* @param int         desired length of time (in hundredths of a second) that
*                        the new image will be displayed
* @param int         Always __LINE__ (script current line number predefined
*                        PHP constant)
*
* @return void
*/
function drawNewImageSetDelay($mgck_wnd, $drw_wnd, $width, $height, $bg_color, $delay, $line) {

    drawNewImage($mgck_wnd, $drw_wnd, $width, $height, $bg_color, $line);

    $line = 'program line '.$line.', function line ';

    checkWandError(MagickSetImageDelay($mgck_wnd, $delay), $mgck_wnd, $line.__LINE__);
}

/**
* Function addMorphedImages() morphs the images in $pre_morph_wnd, with
* $num_morph_frames intermediary frames. The new sequence's images are then
* set to display for $morph_delay 100th's of a second, and then added to the
* end of $mgck_wnd's image list.
*
* @param resource    MagickWand resource
* @param resource    MagickWand resource
* @param int         number of intermediary frames desired between the images
*                        to be morphed
* @param int         desired length of time (in hundredths of a second) that
*                        each frame in the newly morphed sequence will be
*                        displayed
* @param int         Always __LINE__ (script current line number predefined
*                        PHP constant)
*
* @return void
*/
function addMorphedImages($mgck_wnd, $pre_morph_wnd, $num_morph_frames, $morph_delay, $line) {

    $line = 'program line '.$line.', function line ';

    /* Set the current active image in the $mgck_wnd MagickWand to the first
       image in its image list
    */
    MagickSetFirstIterator($pre_morph_wnd);

    /* Perform the morph special effect on $pre_morph_wnd and assign the result
       to $morph_wnd
    */
    $morph_wnd =& checkWandError(MagickMorphImages($pre_morph_wnd, $num_morph_frames), $pre_morph_wnd, $line.__LINE__);

    /* Set the current active image in the $morph_wnd MagickWand to the first
       image in its image list and remove it.
    */
    MagickSetFirstIterator($morph_wnd);
    checkWandError(MagickRemoveImage($morph_wnd), $morph_wnd, $line.__LINE__);

    /* Set the current active image in the $morph_wnd MagickWand to the last
       image in its image list and remove it.
    */
    MagickSetLastIterator($morph_wnd);
    checkWandError(MagickRemoveImage($morph_wnd), $morph_wnd, $line.__LINE__);

    /* Reset $morph_wnd's image list iterator; this has the effect that the
       next call to MagickNextImage($morph_wnd) sets $morph_wnd's current
       active image index to 0, i.e., to the first image.

       Contrast this behavior to MagickSetFirstIterator()'s, which sets the
       current active image's index to 0, causing the next call to
       MagickNextImage() to actually set the image index to 1, i.e., the
       second image in the MagickWand in question.

       This is an important distinction -- be careful.
    */
    MagickResetIterator($morph_wnd);
    while (MagickNextImage($morph_wnd)) {
        /*
           Set the length of time the current active image is displayed to
           $morph_delay hundredths of a second.
        */
        checkWandError(MagickSetImageDelay($morph_wnd, $morph_delay), $morph_wnd, $line.__LINE__);
    }

    MagickSetLastIterator($morph_wnd);

    /* Add the images in $morph_wnd to the end of $mgck_wnd */
    MagickSetLastIterator($mgck_wnd);
    checkWandError(MagickAddImages($mgck_wnd, $morph_wnd), $mgck_wnd, $line.__LINE__);

    DestroymagickWand($morph_wnd);
}

?>
now I am led to believe that the above script was originaly part of the magickwand files but was removed?

so thats where im at right now, I realy dont know where else to go, I have read loads of threads in this forum and have tried loads of things hat people have written but still no joy.

some support and suggestions on this would be great

regards
bbunlock
Posts: 8
Joined: 2006-06-04T08:39:46-07:00
Location: England

Post by bbunlock »

ok been a while since I posted the original post and its had 150+ views and not a single answer or sugestion?

ok so now I have another question and that question is

is there any support worth mentioning for this magickwand php?

lets see if I can get an answer to either of those questions
bbunlock
Posts: 8
Joined: 2006-06-04T08:39:46-07:00
Location: England

Post by bbunlock »

thanks for the reply Disablez at least someone managed to reply.

as for magicwand I would recomend removing it from download and these forums until it has somthing resembling support, there is no point in offering this if there is going to be no support for it.

regards
sp0n9e

Post by sp0n9e »

I don't see any of the windows .dll's for php>=5.1, but the *nix version works fine when compiling for php>=5.1 (even works in 5.2-cvs as of now, which is my current version)

A change in php5.1's api caused it to stop working.

As for why you can't get it to work, i have no idea. I just compiled the php5.2 branch from scratch on my debian vps (and it's more stable in most of its libs than php5.1.4, including SPL and PDO) and I followed the instructions verbatim and had no issues.

It may be this change in php's api that caused you not to be able to compile php, i didn't see/read what version you were running.
the1bullet

Re: cant get it to work on linux

Post by the1bullet »

I understand your frustration at the level of support and information for magickwand for php. I think I've found and read all resources available through both this website and google searches, and I still feel underprepared.

But in answer to your post, it could simply be that the sample script you're using actually doesn't work. I have imagemagick and magickwand for php installed and running on my server, but that script doesn't work for me. You may want to try using some of the simpler scripts available in these tutorials to test if magickwand is installed:

http://www.sitepoint.com/article/dynami ... magemagick
http://www.ioncannon.net/php/61/php-ima ... -examples/

Those are the most helpful resources available for this api that I've found.

One word of caution: if you want more help learning magickwand for php, do NOT to buy The Definitive Guide to ImageMagick from Apress. Chapter 11 is titled MagickWand: ImageMagick Programming with PHP. However, the example and information given is for imagick, NOT MagickWand. That's a pretty big mis-representation, which I think is reason enough to stay away from that book completely.
squig

Re: cant get it to work on linux

Post by squig »

Hello,

@bullet Thanks for the two links :)
Post Reply