PHP使用Imagick庫自動調整圖片曝光

開發思路:自動調整曝光
1.根據圖片中最多的色彩HSL值中的亮度(l:0~1)判斷,超過0.6爲過曝,不足0.4爲欠曝
2.計算(亮度-0.5)的絕對值,計算曝光調整範圍並修正圖片
3.欠曝補償範圍0~100
4.過曝下降範圍0~5
5.調整圖片曝光值php

一 自定義圖片處理類html

<?php
/**
 * 自定義圖片處理類
 * @author Martin
 */
class MyImagick {
    public $image;
    public function __construct($file) {
        $this->image = new Imagick($file);
    }
    /**
     * 獲取圖像HSL信息
     * @param type $num
     * @return type
     */
    public function getImageHSL($num = 1) {
        $avater = clone $this->image;
        //獲取 $num個主要色調
        $avater->quantizeImage($num, Imagick::COLORSPACE_RGB, 0, false, false); 
        $avater->uniqueImageColors();
        $hslarr = array();
        $it = $avater->getPixelIterator();
        $it->resetIterator();
        while ($row = $it->getNextIteratorRow()) {
            foreach ($row as $pixel) {
                $hslarr[] = $pixel->getHSL(); //獲取hsl  
            }
        }
        return $hslarr;
    }
    /**
     * 自動調整曝光
     * 根據圖片中最多的色彩HSL值中的亮度(l:0~1)判斷
     * 超過$exposure_high爲過曝,不足$exposure_low爲欠曝
     * 計算(亮度-0.5)的絕對值,計算曝光調整範圍並修正圖片
     * 欠曝補償範圍0~100
     * 過曝下降範圍0~5
     * @author Martin.Ma 2016.9.2
     */
    public function autoExposure() {
        $exposure_low = 0.4;//這兩個值內爲正常曝光範圍,可本身調整
        $exposure_high = 0.6;
        $hsl = $this->getImageHSL();
        $l = $hsl[0]['luminosity']; //亮度
        if ($l > $exposure_high) {
            $constant = abs($l - 0.5) / 0.5 * 5;
            return $this->image->evaluateImage(Imagick::EVALUATE_POW, $constant);
        }
        if ($l < $exposure_low) {
            $constant = abs($l - 0.5) / 0.5 * 100;
            return $this->image->evaluateImage(Imagick::EVALUATE_LOG, $constant);
        }
        return true;
    }

}

二 使用方法算法

$image = new MyImagick('h1.jpg');
//自動曝光算法
$image->autoExposure();
header('Content-type: image/jpeg');
echo $image->image;

三 結果實例(左側爲處理結果)windows

圖片描述

圖片描述

圖片描述

備註:
1.首先,你要安裝Imagick這個庫,關於如何安裝,文後會附一個轉載連接。
http://www.open-open.com/lib/...
2.開發環境:windows7 WAMP3.0.4 64位 PHP7.0.4this

相關文章
相關標籤/搜索