资讯专栏INFORMATION COLUMN

PHP使用Imagick库自动调整图片曝光

el09xccxy / 3371人阅读

摘要:开发思路自动调整曝光根据图片中最多的色彩值中的亮度判断超过为过曝,不足为欠曝计算亮度的绝对值,计算曝光调整范围并修正图片欠曝补偿范围过曝降低范围调整图片曝光值一自定义图片处理类自定义图片处理类获取图像信息获取个主要色调获取

开发思路:自动调整曝光
1.根据图片中最多的色彩HSL值中的亮度(l:0~1)判断,超过0.6为过曝,不足0.4为欠曝
2.计算(亮度-0.5)的绝对值,计算曝光调整范围并修正图片
3.欠曝补偿范围0~100
4.过曝降低范围0~5
5.调整图片曝光值

一 自定义图片处理类

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;

三 结果实例(左侧为处理结果)

备注:
1.首先,你要安装Imagick这个库,关于如何安装,文后会附一个转载链接。
http://www.open-open.com/lib/...
2.开发环境:windows7 WAMP3.0.4 64位 PHP7.0.4

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30400.html

相关文章

  • Intervention/image 图片处理扩展包的安装和使用

    摘要:本文经授权转自社区说明是为定制的图片处理工具它提供了一套易于表达的方式来创建编辑图片。 本文经授权转自 PHPHub 社区 说明 Intervention/image 是为 Laravel 定制的图片处理工具, 它提供了一套易于表达的方式来创建、编辑图片。 本文章由 The EST Group 成员 @monkey 撰写, 首发地为 PHPHub 社区. Demo 代码请见:https...

    princekin 评论0 收藏0
  • PHP使用ImageMagick生成base64图片

    摘要:个人博客本文原地址最近的项目中,需要用到画图和图片拼接效果,这里是一些开发过程里用到的一些点还有就是一些踩过的坑。通过生成图片格式,为前端所使用。需要注意的是前端得到的额数据里包含有回车字符,需要特殊处理才可以正确显示图片。 个人博客 https://duanruilong.github.io/blog/本文原地址https://duanruilong.github.io/blog/2...

    avwu 评论0 收藏0
  • PHP使用ImageMagick生成base64图片

    摘要:个人博客本文原地址最近的项目中,需要用到画图和图片拼接效果,这里是一些开发过程里用到的一些点还有就是一些踩过的坑。通过生成图片格式,为前端所使用。需要注意的是前端得到的额数据里包含有回车字符,需要特殊处理才可以正确显示图片。 个人博客 https://duanruilong.github.io/blog/本文原地址https://duanruilong.github.io/blog/2...

    supernavy 评论0 收藏0
  • PHP的ImageMagick使用

    摘要:我们只能把邓肯去掉第一个参数是图片的宽度第二个是高度图片裁剪的轴位置图片裁剪轴位置然后我们再把生成一个圆角就生成了少了邓肯现在马刺,外加一个伦纳德这里我重新写了文字,变成了 之前写了一个项目需要使用PHP的Imagick类进行图像的操作;个人感觉目前关于Imagick的文档虽然很多,但是比较乱。我会通过一个范例解释Imagick的简单的使用; (1).创建一个新图片,宽500px,高...

    余学文 评论0 收藏0
  • PHP极其强大的图片处理Grafika详细教程(1):图像基本处理

    摘要:它包含所有的图片处理方法。由于,是基于和库,所以使用方法会根据当前情况,自动选择所需要的图片处理库。这里说明下,如果文字为中文,需要找一个支持中文的字体。默认字体不支持中文,所以你写中文,就是都是小方框。 Grafika是一个PHP图像处理库,是基于Imagick和GD,可以用于改变图片大小,剪裁,比较,添加水印等等功能。还有感知哈希,高级图像过滤,绘制贝塞尔曲线等功能,可谓非常强大。...

    fai1017 评论0 收藏0

发表评论

0条评论

el09xccxy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<