開發思路:自動調整曝光
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