Carnet Wiki

tester_image_ratio

Pour vérifier et mesurer l’ampleur des erreurs de _image_ratio avec ceil et vérifier que c’est OK avec round

Pour les images carrées

On passe un argument debut par l’url et on teste toutes les valeurs entre debut et debut+100.
Chacune de ces valeurs $z va être sucessivement la cible de _image_ratio pour les 100 valeurs d’entrées allant de $z à $z+100. On teste lorsque la fonction utilise ceil ET lorsqu’elle utilise round.
Comme c’est un carré, le résultat doit être un carré aussi. On compte les erreurs pour ceil et pour round. Il y en a plein pour ceil. Il n’y en a jamais pour round.

On peut aussi passer un offset dans l’url : ce sont alors les 100 entrées dimensioncible+offset à dimensioncible+offset+100 qui sont testées. Ça permet de tester rapidement des zones de valeurs très différentes.

// fonction du core, utilisant ceil
function teste_image_ratio_ceil($srcWidth, $srcHeight, $maxWidth, $maxHeight) {
	$ratioWidth = $srcWidth / $maxWidth;
	$ratioHeight = $srcHeight / $maxHeight;
 
	if ($ratioWidth <= 1 and $ratioHeight <= 1) {
		$destWidth = $srcWidth;
		$destHeight = $srcHeight;
	} elseif ($ratioWidth < $ratioHeight) {
		$destWidth = $srcWidth / $ratioHeight;
		$destHeight = $maxHeight;
	} else {
		$destWidth = $maxWidth;
		$destHeight = $srcHeight / $ratioWidth;
	}
 
	return array(
		ceil($destWidth),
		ceil($destHeight),
		max($ratioWidth, $ratioHeight)
	);
}
 
// fonction corrigée utilisant round
function teste_image_ratio_round($srcWidth, $srcHeight, $maxWidth, $maxHeight) {
	$ratioWidth = $srcWidth / $maxWidth;
	$ratioHeight = $srcHeight / $maxHeight;
 
	if ($ratioWidth <= 1 and $ratioHeight <= 1) {
		$destWidth = $srcWidth;
		$destHeight = $srcHeight;
	} elseif ($ratioWidth < $ratioHeight) {
		$destWidth = $srcWidth / $ratioHeight;
		$destHeight = $maxHeight;
	} else {
		$destWidth = $maxWidth;
		$destHeight = $srcHeight / $ratioWidth;
	}
 
	return array(
		round($destWidth),
		round($destHeight),
		max($ratioWidth, $ratioHeight)
	);
}
 
function teste_ratio($z, $offset=0) {
	$ceil_errors = [];
	$round_errors = [];
	for ($i=$z+$offset; $i<$z+100+$offset; $i++) {
		list ($a, $b, $c) = teste_image_ratio_ceil ($i, $i, $z, $z);
		if ($a != $b) {
			$ceil_errors[$i] = "$i / $z donne ($a,$b)";
		}
		list ($a, $b, $c) = teste_image_ratio_round ($i, $i, $z, $z);
		if ($a != $b) {
			$round_errors[$i] = "$i / $z donne ($a,$b)";
		}
	}
	return array ($ceil_errors, $round_errors);
}
 
 
if (isset($_GET['debut']))	$debut = $_GET['debut']; else $debut = 100;
$offset = (isset($_GET['offset']) ? $_GET['offset'] : 0);
for ($z=$debut; $z< $debut+100; $z++) {
	list ($ceil_errors, $round_errors) = teste_ratio ($z, $offset);
	if ($c=count ($ceil_errors)) {
		echo "erreurs de ceil pour $z avec offset $offset : $c<br>";
	}
	if ($c = count ($round_errors)) {
		echo "!!! erreurs de round pour $z  avec offset $offset : $c<br>";
	}
}

Résultats pour 310 (extraits) avec offset 0 :

erreurs de ceil pour 310 : 4
erreurs de ceil pour 311 : 6
erreurs de ceil pour 312 : 2
erreurs de ceil pour 313 : 2
erreurs de ceil pour 315 : 3
erreurs de ceil pour 316 : 3
erreurs de ceil pour 317 : 2
erreurs de ceil pour 319 : 4
erreurs de ceil pour 321 : 18

Résultats pour 1000 (extraits) avec offset 0 :

erreurs de ceil pour 1000 : 29
erreurs de ceil pour 1001 : 24
erreurs de ceil pour 1002 : 24
erreurs de ceil pour 1003 : 22
erreurs de ceil pour 1004 : 31
erreurs de ceil pour 1005 : 22
erreurs de ceil pour 1006 : 22
erreurs de ceil pour 1007 : 22
erreurs de ceil pour 1008 : 29
erreurs de ceil pour 1009 : 22
erreurs de ceil pour 1011 : 18
erreurs de ceil pour 1012 : 23

JLuc - Mise à jour :22 February 2020 at 11:38