• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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.