Esempio n. 1
0
 /**
  * Make the image greyscale
  * $rv = red value, defaults to 38
  * $gv = green value, defaults to 36
  * $bv = blue value, defaults to 26
  * Based (more or less entirely, with changes for readability) on code from http://www.teckis.com/scriptix/thumbnails/teck.html
  */
 function greyscale($rv = 38, $gv = 36, $bv = 26)
 {
     $width = $this->width;
     $height = $this->height;
     $newGD = imagecreatetruecolor($this->width, $this->height);
     $rt = $rv + $bv + $gv;
     $rr = $rv == 0 ? 0 : 1 / ($rt / $rv);
     $br = $bv == 0 ? 0 : 1 / ($rt / $bv);
     $gr = $gv == 0 ? 0 : 1 / ($rt / $gv);
     for ($dy = 0; $dy <= $height; $dy++) {
         for ($dx = 0; $dx <= $width; $dx++) {
             $pxrgb = imagecolorat($this->gd, $dx, $dy);
             $heightgb = ImageColorsforIndex($this->gd, $pxrgb);
             $newcol = $rr * $heightgb['red'] + $br * $heightgb['blue'] + $gr * $heightgb['green'];
             $setcol = ImageColorAllocate($newGD, $newcol, $newcol, $newcol);
             imagesetpixel($newGD, $dx, $dy, $setcol);
         }
     }
     // imagecopyresampled($newGD, $this->gd, 0,0, $srcX, $srcY, $width, $height, $srcWidth, $srcHeight);
     $output = new GD();
     $output->setGD($newGD);
     if ($this->quality) {
         $output->setQuality($this->quality);
     }
     return $output;
 }