Imagick::contrastImage
(PECL imagick 2, PECL imagick 3)
Imagick::contrastImage — Change the contrast of the image
说明
public 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。
范例
示例 #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();
}
?>
User Contributed Notes 3 notes
up down 3 removespam dot roland at tannerritchie dot com ¶7 years ago
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);
}
}
}
}
?>
up
down
-3
xyking ¶12 years ago
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);
}
}
}
?>
up
down
-5
quickshiftin at gmail dot com ¶7 years ago
xyking's comment is wrong so be careful if you read it. You pass a value of 0 to *increase* the contrast.
add a note
官方地址:https://www.php.net/manual/en/imagick.contrastimage.php