📜  PHP |想象一下 autoLevelImage()函数(1)

📅  最后修改于: 2023-12-03 15:33:35.643000             🧑  作者: Mango

PHP | 想象一下 autoLevelImage() 函数

简介

autoLevelImage() 函数是一个用于自动调整图像水平级别的 PHP 函数。该函数可以根据图像的亮度分布以及色彩对比度等因素来自动调整图像的水平级别,从而使图像更加清晰、明亮,使色彩更加鲜艳。

功能特性
  • 自动调整图像水平级别
  • 增加图像亮度
  • 提高图像色彩对比度
参数列表

函数默认参数如下所示:

autoLevelImage($source_image, $destination_image = NULL, $black_point = 35, $white_point = 235);
  • $source_image: 必需参数,待处理的图像源文件。
  • $destination_image: 可选参数,处理完成后的输出文件。
  • $black_point: 可选参数,黑点图像修整的像素值,默认为 35。
  • $white_point: 可选参数,白点图像修整的像素值,默认为 235。
使用示例

以下示例代码展示了如何使用 autoLevelImage() 函数:

// 引入自定义函数库
require_once('functions.php');

// 原始图像路径
$source_image = '/path/to/source/image.jpg';

// 输出图像路径
$destination_image = '/path/to/destination/image.jpg';

// 调用函数完成图像水平调整
autoLevelImage($source_image, $destination_image);
函数实现
/**
 * 自动调整图像水平级别
 *
 * @param string $source_image 源图像路径
 * @param string $destination_image 输出图像路径
 * @param int $black_point 黑点图像修整的像素值,默认为 35
 * @param int $white_point 白点图像修整的像素值,默认为 235
 *
 * @return void
 */
function autoLevelImage($source_image, $destination_image = NULL, $black_point = 35, $white_point = 235) {

    // 打开源图像文件
    $source_image = imagecreatefromjpeg($source_image);

    // 获取图像尺寸
    $image_width   = imagesx($source_image);
    $image_height  = imagesy($source_image);

    // 循环遍历每一个像素点
    for ($i = 0; $i < $image_width; $i++) {
        for ($j = 0; $j < $image_height; $j++) {

            // 获取当前像素点的 RGBA 色彩值
            $pixel_color = imagecolorat($source_image, $i, $j);

            // 将 RGBA 色彩值转换为 RGB 色彩值
            $red   = ($pixel_color >> 16) & 0xFF;
            $green = ($pixel_color >> 8) & 0xFF;
            $blue  = $pixel_color & 0xFF;

            // 计算每个色彩通道的平均亮度
            $mean_value = ($red + $green + $blue) / 3;

            // 计算色彩对比度
            $contrast_value = ($mean_value - $black_point) * (255 / ($white_point - $black_point));
            if ($contrast_value < 0) {
                $contrast_value = 0;
            }
            if ($contrast_value > 255) {
                $contrast_value = 255;
            }

            // 计算 RGB 色彩值
            $rgb_color = $contrast_value | ($contrast_value << 8) | ($contrast_value << 16);

            // 将 RGB 色彩值写入到目标图像中
            imagesetpixel($source_image, $i, $j, $rgb_color);
        }
    }

    // 如果用户指定了输出文件路径,则将处理后的图像保存到该文件中;否则直接输出到浏览器
    if ($destination_image != NULL) {
        imagejpeg($source_image, $destination_image, 100);
    } else {
        header("Content-Type: image/jpeg");
        imagejpeg($source_image, NULL, 100);
    }

    // 释放内存
    imagedestroy($source_image);
}

参考资料: