PHP可以检测图像是否"太轻"?

gti*_*flm 7 php

在教育网站的某个区域,学生扫描并提交作业.

问题:当学生使用铅笔时,扫描结果非常轻,难以阅读.

PHP可以用来检测扫描是否太轻?我想知道是否可以使用像 使用PHP检测图像的颜色或者如何使用PHP 检测"浅色"颜色,但我不确定.这样的问题.

我不是必须要求代码,只是看看它是否可能,以及是否存在某种已存在的功能.

更新基于h2ooooooo的接受答案

我想知道PNG位深度是否会导致问题.使用他(她的?)解决方案,请考虑以下内容......

此图像("1.png")返回97.8456638355,深度为32 ...

但是,此图像(" 2.png ")返回98.4853859241,深度为24 ...

这是一个小于1%的差异,看起来1.png应该返回较低的数字,因为它显着"更加清晰",总体上比2.png更暗.

有没有人知道位深度是否会导致脚本无法正常工作?

h2o*_*ooo 9

下面这么简单的东西应该可以工作,只需遍历每个像素并在你链接的线程中使用HSL算法.为了您的目的,您可以简单地获取值并将其与阈值进行比较(测试各种文档!).

码:

<?php
    function getBrightness($gdHandle) {
        $width = imagesx($gdHandle);
        $height = imagesy($gdHandle);

        $totalBrightness = 0;

        for ($x = 0; $x < $width; $x++) {
            for ($y = 0; $y < $height; $y++) {
                $rgb = imagecolorat($gdHandle, $x, $y);

                $red = ($rgb >> 16) & 0xFF;
                $green = ($rgb >> 8) & 0xFF;
                $blue = $rgb & 0xFF;

                $totalBrightness += (max($red, $green, $blue) + min($red, $green, $blue)) / 2;
            }
        }

        imagedestroy($gdHandle);

        return ($totalBrightness / ($width * $height)) / 2.55;
    }
?>
Run Code Online (Sandbox Code Playgroud)

用法:

<?php
    var_dump( getBrightness( imagecreatefrompng('pic1.png') ) ); 
    // 22.626517105341

    var_dump( getBrightness( imagecreatefrompng('pic2.png') ) ); 
    // 60.289981746452

    var_dump( getBrightness( imagecreatefrompng('pic3.png') ) ); 
    // 77.183088971324
?>
Run Code Online (Sandbox Code Playgroud)

结果:

pic1.png(22.62%亮):

在此输入图像描述

pic2.png(60.28%亮):

在此输入图像描述

pic3.png(亮度77.18%):

在此输入图像描述

注意:

如果文档很大(这将遍历每个像素),这将花费很长时间.如果您希望它更快,您可以随时将调整大小的GD资源传递给该函数.