function image_float ($img, $align, $margin=10, $coul=-1) {
if (strlen($coul) == 6) {
$couleurs = couleur_hex_to_dec($coul);
$dr= $couleurs["red"];
$dg= $couleurs["green"];
$db= $couleurs["blue"];
$placer_fond = true;
}
else $placer_fond = false;
$image = valeurs_image_trans($img, "float-$align$coul", "php");
if (!$image) return("");
$w = $image["largeur"];
$h = $image["hauteur"];
$precision = round($h / 5);
$im = $image["fichier"];
$dest = $image["fichier_dest"];
$creer = $image["creer"];
if (!$placer_fond) $ret = "
";
if ($creer) {
include_spip('inc/logos'); // bicoz presence reduire_image
$im_n = extraire_attribut(image_reduire($im, 0, $precision), "src");
$nouveau = valeurs_image_trans($im_n, "reduction-$precision");
$im_n = $nouveau["fichier"];
$x_i = $nouveau["largeur"];
$y_i = $nouveau["hauteur"];
$rapport = ($w / $x_i);
$im_n = $image["fonction_imagecreatefrom"]($im_n);
// une premiere passe
// pour recuperer les valeurs
for ($j = 0; $j < $y_i; $j++) {
$transp = true;
for ($i = 0; $i < $x_i && $transp; $i++) {
if ($align == "right") $rgb = ImageColorAt($im_n, $i+1, $j);
else $rgb = ImageColorAt($im_n, ($x_i - $i)-1, $j);
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if ($a > 125) $larg[$j] ++;
else if ($placer_fond && abs($r-$dr)+abs($g-$dg)+abs($b-$db) < 40) $larg[$j] ++;
else $transp = false;
}
}
$larg[-1] = $w;
$larg[$y_i] = $w;
if ($align == "left") $mrg = "margin-right";
else $mrg = "margin-left";
// une deuxieme passe
// pour appliquer les valeurs
// en utilisant les valeurs precedente et suivante
for ($j = 0; $j < $y_i; $j++) {
$reste = ($precision - $j);
$haut_rest = $h - $haut_tot;
$hauteur = round(($haut_rest) / $reste);
$haut_tot = $haut_tot + $hauteur;
$resultat = min($larg[$j-1],$larg[$j],$larg[$j+1]);
// Placer l'image en fond de differentes tranches
// uniquement si detourage par la couleur de fond
if ($placer_fond && $haut_tot <= $h) $backg = " background: url($im) $align -".($haut_tot-$hauteur)."px no-repeat;";
else $backg = "";
$forme .= "\n";
}
// Ajouter un div de plus en dessous
$forme .= "\n";
// Sauvegarder le fichier
$handle = fopen($dest, 'w');
fwrite($handle, $forme);
fclose($handle);
$ret .= $forme;
}
else {
$ret .= join(file($dest),"");
}
return $ret;
}