Immagine di sfondo scuro o luce?
-
27-10-2019 - |
Domanda
Sto facendo una conversione ODP-> HTML con PHP. Ho problemi con quanto segue:
Usa lo stile: usa la proprietà-window-pon-color per specificare se il colore di primo piano della finestra deve essere usato come il colore di primo piano per un colore di sfondo chiaro e bianco per un colore di sfondo scuro.
(Specifica OpenDocument Versione 1.0, 15.4.4)
Se ho un'immagine di sfondo, come faccio a controllare, se questa immagine è leggera o scura?
Hai qualche idea?
Grazie in anticipo, Levu
Soluzione
Ho pensato che fosse un problema piuttosto interessante da risolvere, quindi ho violato una sceneggiatura veloce per farlo. seguendo gli altri suggerimenti forniti
<?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;
}
Altri suggerimenti
Potresti utilizzare un po 'di algoritmo di elaborazione delle immagini che esaminerebbe la luminosità dei pixel e calcola la luminosità media dell'immagine.
Questo documento ti farà iniziare:
http://www.kweii.com/site/color_theory/2007_lv/brightnesscalculation.pdf
Se stai cercando di usare GD, provando a usare imagecolorat
per assaggiare i pixel dell'immagine. È possibile determinare l'RGB del colore come mostrato nella pagina MAN PHP.
Successivamente, prendi i campioni RGB e determina la loro luminosità usando a Formula di luminanza di base.
Determina una soglia per ciò che consideri Light vs. Dark e classificare di conseguenza.