PHP 8.3.17 Released!

Imagick::contrastImage

(PECL imagick 2, PECL imagick 3)

Imagick::contrastImageChange 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();
}

?>

添加备注

用户贡献的备注 3 notes

up
3
removespam dot roland at tannerritchie dot com
10 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
-4
xyking
14 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
-5
quickshiftin at gmail dot com
10 years ago
xyking's comment is wrong so be careful if you read it. You pass a value of 0 to *increase* the contrast.
To Top