我正在用PHP進行ODP-> HTML轉換。我有一個問題,以下內容:背景圖像黑暗還是光線?
使用的樣式:使用窗口的字體,顏色 屬性來指定 窗口前景色是否應該不會像作爲前景色爲 淺色背景 顏色和白色爲 深色背景顏色。
(OpenDocument格式規範1.0版,15.4.4)
如果我有一個背景圖像,如何檢查,如果這個形象是淺色或深色?
你有什麼想法嗎?
由於提前, 島
我正在用PHP進行ODP-> HTML轉換。我有一個問題,以下內容:背景圖像黑暗還是光線?
使用的樣式:使用窗口的字體,顏色 屬性來指定 窗口前景色是否應該不會像作爲前景色爲 淺色背景 顏色和白色爲 深色背景顏色。
(OpenDocument格式規範1.0版,15.4.4)
如果我有一個背景圖像,如何檢查,如果這個形象是淺色或深色?
你有什麼想法嗎?
由於提前, 島
我認爲這是一個很有趣的問題來解決,所以我設計了一個簡單快速的腳本來做到這一點。按照提供的其他建議
<?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;
}
你可能使用一些圖像處理算法,將檢查像素的亮度和計算平均圖像亮度。
該文件將讓你開始:
http://www.kweii.com/site/color_theory/2007_LV/BrightnessCalculation.pdf
我看到有很多不同的公式計算亮度,我應該使用哪一個?亮度? – levu 2011-05-08 06:53:42
這取決於您的確切需求,但我認爲luma或任何其他人都可以爲您的問題做好工作。 – oktalBlizzard 2011-05-08 07:11:59
只需選擇並修改你認爲最容易理解的算法。 – oktalBlizzard 2011-05-08 07:15:06
如果你正在尋找使用GD,使用imagecolorat
採樣圖像的像素嘗試。您可以確定PHP手冊頁上顯示的顏色的RGB。
接着,取RGB樣品(多個),並使用basic luminance formula確定它們的亮度。
確定你考慮光與暗,並相應分類的閾值。
您對600x400左右的圖片樣本數量有何建議?我認爲10是不是真的工作.. PS真棒答案! – maxisme 2015-09-02 16:27:51
例如https://farm6.staticflickr.com/5478/14085542631_6649f0a995_b.jpg即將爲107,這是很輕,可能不會用白色字體的工作。和https://farm4.staticflickr.com/3912/15197127275_74754c631f_b.jpg即將到來97,它非常黑暗? (這是100個NUM樣品時) – maxisme 2015-09-02 16:34:57
這是一個有點試驗和錯誤的,但對於一個開始你的形象是1024x683 = 700000個像素左右,除以100,你必須每7000個像素1個樣本。樣本只需要着陸在港口的這些燈光中的一些燈上,它就會將平均值拋出。我會碰一下,嘗試1000個樣本,看看你得到了什麼。時間,看看什麼是您的性能需求尚可, – bumperbox 2015-09-02 21:00:35