How to save an Imagick object (php)

15,696

Replace

imagepng($im, 'new_image.png');

with

$im->writeImage('new_image.png');
Share:
15,696
Arch1tect
Author by

Arch1tect

sup

Updated on June 04, 2022

Comments

  • Arch1tect
    Arch1tect almost 2 years

    I guess it's a silly question, but it's my first time to deal with php and image handling. In short I wonder how I can save the image instead of echoing it on a web page. The code is for distorting image which might not be in important in this question, you can just see the last few line when I save the image..

    Codes:

    /* Create new object */
    $im = new Imagick('my_img.png');
    
    
    $width = $im->getImageWidth();
    $height = $im->getImageHeight();
    
    /* Set the image format to png */
    $im->setImageFormat('png');
    
    /* Fill new visible areas with transparent */
    $im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
    
    /* Activate matte */
    $im->setImageMatte(true);
    
    /* Control points for the distortion */
    $controlPoints = array( 0, 0, 
                        $height*0.7, $height*0.3,
    
                        0, $height,
                        0, $height,
    
                        $width, 0,
                        $height*0.7+$width, $height*0.3,
    
                        $width, $height,
                        $width, $height);
    
    /* Perform the distortion */                       
    $im->distortImage(Imagick::DISTORTION_PERSPECTIVE, $controlPoints, true);
    
    /* Ouput the image */ 
    //commented out because I want to save the image instead
    //header("Content-Type: image/png");
    //echo $im;
    
    // right way to save image?
    imagepng($im, 'new_image.png');
    
    // Free up memory
    imagedestroy($im);
    

    The error I get: imagepng(): supplied argument is not a valid Image resource...