略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: Imagick::contrastImage

2024-12-22

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

?>
add a noteadd a note

User Contributed Notes 3 notes

up
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
-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
-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.

官方地址:https://www.php.net/manual/en/imagick.contrastimage.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3