SitePoint Sponsor

User Tag List

Results 1 to 5 of 5
  1. #1
    SitePoint Member
    Join Date
    Jun 2004
    Location
    England
    Posts
    8
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question ImageMagick command with PNG alpha transparency behaves differently in PHP

    I'm using ImageMagick's convert utility to carry out some image manipulation. Here's the command I'm running via PHP's exec command:

    Code:
    /usr/local/bin/convert /path/to/photo/4.jpg -format PNG32 -background transparent -thumbnail x330 -resize '440x<' -resize 50% -gravity center -crop 220x165+0+0 -rotate "-4.4" /path/to/photo/4.png 2>&1
    The command runs perfectly via the CLI (see shell.png), but when run in PHP it outputs a completely different image (see php.jpg). php.jpg was originally named php.png as it was the file being outputted when the command was run via PHP, however when uploading the image as an attachment for this post the uploader told me that "This JPEG image has the incorrect file extension" - this would suggest that the mime type of the file that the convert command is outputting when run via PHP is image/jpeg? If I take the '-background transparent' switch out of the command it runs the same in PHP as on the CLI, but I have no idea why!

    Here's what the command is supposed to achieve:

    • Set the format of the image that will be outputted to a 32-bit PNG with a transparent background
    • Resize the image to an appropriate size and then crop it from the center of the image
    • Rotate the image -4.4 degrees
    • The result of the command should then be output to a PNG file
    • The 2>&1 is simply a redirection of stderr to the same location as stdout so that I can capture any error in PHP


    On my local development setup (MAMP on OS X Leopard) I am running ImageMagick 6.3.6 11/28/07 Q8 (on the live server the version of ImageMagick is 6.0.7 05/03/07 Q16, so I'm expecting functionality to be pretty similar?)

    I'm open of course to any suggestions that use a different ImageMagick method to achieve the results I require - any help is greatly appreciated as this has been baffling me for a good while now, thanks!
    Attached Images Attached Images

  2. #2
    SitePoint Mentor silver trophy
    Rubble's Avatar
    Join Date
    Dec 2005
    Location
    Cambridge, England
    Posts
    2,410
    Mentioned
    81 Post(s)
    Tagged
    3 Thread(s)
    I would say version 6.0.7 is probably about 3 years old; I think its the version that comes with the standard linux/unix installations.

    Q8 is 8bit and Q16 is 16bit.

    So there is quite a differnce in the 2 versions.

  3. #3
    SitePoint Member
    Join Date
    Jun 2004
    Location
    England
    Posts
    8
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Rubble View Post
    I would say version 6.0.7 is probably about 3 years old; I think its the version that comes with the standard linux/unix installations.

    Q8 is 8bit and Q16 is 16bit.

    So there is quite a differnce in the 2 versions.
    Thanks for the information Rubble, that's definitely useful to know, however the problem I'm getting is when testing with my local development setup (newer version of ImageMagick). The key part of my problem is that I can't seem to output a PNG with an alpha transparent background - I've tried several different approaches, but I've found the ImageMagick documentation regarding transparency and PNGs to be rather confusing!

  4. #4
    SitePoint Mentor silver trophy
    Rubble's Avatar
    Join Date
    Dec 2005
    Location
    Cambridge, England
    Posts
    2,410
    Mentioned
    81 Post(s)
    Tagged
    3 Thread(s)
    Just to confirm what you are talking about:

    On your local development machine you are running as a server and using php - this does not work. You get the black background

    When run with the shell on the same machine it is OK and you get the transparent background.

    You have not tried it on the online server which is running 6.0.7

    I presume the problem must be something to do with the way the code is being interperated?

    This works for me using XAMPP on windows XP:
    PHP Code:
    <?php
    $array
    =array();
    echo 
    "<pre>";
    exec("convert 2007_1226christmas0004.JPG -format PNG32 -background transparent -thumbnail x330 -resize \"440x<\" -resize 50% -gravity center -crop 220x165+0+0 -rotate -4.4 output1.png 2>&1"$array); 
    echo 
    "<br>".print_r($array)."<br>"
    echo 
    "</pre>";
    ?>
    Note if I use -resize \"440x<\" it works but if I use -resize '440x<' it fails. This is just something to do with windows.
    Version: ImageMagick 6.3.7 11/14/07 Q16
    I can use either on my server and they work Version: ImageMagick 6.3.5 08/29/07 Q16
    I have had nothing to do with OS X and presume it must be something similar with the way the code is written ?

    P.S. If I use the XP command line I must use -resize "440x<" not -resize '440x<' as well.
    Last edited by Rubble; Jan 29, 2008 at 13:03. Reason: Added P.S.

  5. #5
    SitePoint Member
    Join Date
    Jun 2004
    Location
    England
    Posts
    8
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    You've got PM Rubble


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •