我正在使用PHP进行ODP-> HTML转换。我有以下问题:
使用样式:use-window-font-color 属性指定是否 窗口前景色应为 用作a的前景色 浅色背景颜色和白色 深色背景色。
(OpenDocument规范版本1.0,15.4.4)
如果我有背景图像,如果此图像是浅还是暗,我该如何检查?
你有什么想法吗?
提前致谢, 岛
答案 0 :(得分:37)
我认为这是一个非常有趣的问题需要解决,所以我编写了一个快速的脚本来完成它。遵循提供的其他建议
<?php
// TODO supply your own filenames
$filenames = array(
'testpics/client-bella-vi.jpg',
'testpics/istockphoto_8577991-concept-of-business-people-crowd.jpg',
'testpics/medium-gray.jpg');
// loop though each file
foreach ($filenames as $filename) {
echo "$filename<br/>";
$luminance = get_avg_luminance($filename,10);
echo "AVG LUMINANCE: $luminance<br />";
// assume a medium gray is the threshold, #acacac or RGB(172, 172, 172)
// this equates to a luminance of 170
if ($luminance > 170) {
echo "Black Text<br />";
} else {
echo 'White Text<br />';
}
echo "<br />";
}
exit;
// get average luminance, by sampling $num_samples times in both x,y directions
function get_avg_luminance($filename, $num_samples=10) {
$img = imagecreatefromjpeg($filename);
$width = imagesx($img);
$height = imagesy($img);
$x_step = intval($width/$num_samples);
$y_step = intval($height/$num_samples);
$total_lum = 0;
$sample_no = 1;
for ($x=0; $x<$width; $x+=$x_step) {
for ($y=0; $y<$height; $y+=$y_step) {
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// choose a simple luminance formula from here
// http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
$lum = ($r+$r+$b+$g+$g+$g)/6;
$total_lum += $lum;
// debugging code
// echo "$sample_no - XY: $x,$y = $r, $g, $b = $lum<br />";
$sample_no++;
}
}
// work out the average
$avg_lum = $total_lum/$sample_no;
return $avg_lum;
}
答案 1 :(得分:4)
您可以使用一些图像处理算法来检查像素亮度并计算平均图像亮度。
本文档将帮助您入门:
http://www.kweii.com/site/color_theory/2007_LV/BrightnessCalculation.pdf
答案 2 :(得分:3)
如果您要使用GD,请尝试使用imagecolorat
对图像的像素进行采样。您可以确定颜色的RGB,如PHP手册页所示。
接下来,拍摄RGB样本并使用basic luminance formula确定其亮度。
确定您认为亮对暗的阈值并相应地进行分类。