Imagick::contrastImage()
(PECL imagick 2.0.0)
Change the contrast of the image
说明
Imagick::contrastImage(bool $sharpen): bool
Enhances the intensity differences between the lighter and darker elements of the image. Set sharpen to a value other than 0 to increase the image contrast otherwise the contrast is reduced.
参数
- $sharpen
The sharpen value
返回值
成功时返回TRUE
。
错误/异常
错误时抛出 ImagickException。
范例
Example #1 Imagick::contrastImage()
<?php function contrastImage($imagePath, $contrastType) { $imagick = new \Imagick(realpath($imagePath)); if ($contrastType != 2) { $imagick->contrastImage($contrastType); } header("Content-Type: image/jpg"); echo $imagick->getImageBlob(); } ?>
Both xyking and quickshiftin include errors in their comments. xyking's error is in looping through negative numbers. quickshifting is incorrect in stating that 0 *increases* contrast (it does not - it decreases it). Here is a (tested, working) method to increment or decrement contrast: <?php class Images { public function contrastImage($contrast, $imagePath){ $this->image = new Imagick(); $this->image->readImage($imagePath); if ($contrast > 0){ for ($i = 1; $i < $contrast; $i++){ $this->image->contrastImage(1); } }else if ($contrast <= 0) { for ($i = 0; $i > $contrast; $i--) { $this->image->contrastImage(0); } } } } ?>
Tip: <?php $image->contrastImage(1); //Increase contrast once $image->contrastImage(1); //Increase contrast more $image->contrastImage(1); //Increase contrast even more $image->contrastImage(0); //Decrease contrast once $image->contrastImage(0); //Decrease contrast more $image->contrastImage(0); //Decrease contrast even more //This could be made into a function like this: public function contrast($level) { $level = (int)$level; if ($level < -10) { $level = -10; } else if ($level > 10) { $level = 10; } if ($level > 0) { for ($i = 0; $i < $level; $i++) { $this->image->contrastImage(1); } } else if ($level < 0) { for ($i = $level; $i > 0; $i--) { $this->image->contrastImage(0); } } } ?>
xyking's comment is wrong so be careful if you read it. You pass a value of 0 to *increase* the contrast.