Mid-Atlantic Developer Conference

Image Processing (ImageMagick)

add a note add a note

User Contributed Notes 5 notes

up
25
mlong-php at mlong dot us
10 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
2
Eero Niemi (eero at eero dot info)
10 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
0
carlosvanhalen7 at gmail dot com
5 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;
}

?>
up
-6
aem at teletype dot ru
6 years ago
To configure and build imagick extension with phpize, you must first install libmagickwand-dev and libmagickcore-dev.

For example, "sudo apt-get install libmagickwand-dev libmagickcore-dev" and then phpize and ./configure.
up
-6
mlong-php at mlong dot us
10 years ago
The fit functionality of thumbnailImage doesn't work as one would anticipate. Instead, use this to make a thumbnail that has max of 200x82:

  // Create thumbnail max of 200x82
  $width=$im->getImageWidth();
  if ($width > 200) { $im->thumbnailImage(200,null,0); }

  $height=$im->getImageHeight();
  if ($height > 82) { $im->thumbnailImage(null,82,0); }
To Top