图像处理(ImageMagick)

User Contributed Notes

carlosvanhalen7 at gmail dot com 07-Mar-2013 04:09
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;
}

?>
aem at teletype dot ru 30-Nov-2011 12:09
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.
Eero Niemi (eero at eero dot info) 08-Apr-2008 04:06
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" );
?>
mlong-php at mlong dot us 24-Oct-2007 10:11
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); }
mlong-php at mlong dot us 24-Oct-2007 08:46
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;