PHP 7 : Utilisation d'une boucle foreach avec une image

Le problème exposé dans ce sujet a été résolu.

Salut à tous !

J’essaye de parcourir tous les pixels (i, j) d’une image à l’aide d’une boucle foreach.
Je consulte la documentation de foreach :

PHP 5.5 ajoute la possibilité d’itérer dans un tableau de tableaux, et d’en extraire les tableaux internes dans des variables, en fournissant une liste list() comme valeur.

J’essaye alors le code suivant avec PHP 7 :

<?php

$im  = imagecreatefrompng('image.png');
$tim = array($im);

$black = imagecolorallocate($im, 0, 0, 0);

foreach ($tim as list($i, $j))
{
    imagesetpixel($im, $i, $j, $black);
}

header('Content-type: image/png');
imagepng($im);

Le code ne fonctionne pas, il se contente de rendre le pixel (0, 0) en noir et laisse le reste inchangé.
La ligne 4 renvoie un tableau dont l’unique élément est l’image $im.

Auriez-vous une idée de la manière dont on pourrait parcourir les pixels d’une image avec la boucle foreach ?

Le souci avec cette technique, c’est qu’elle utilise deux boucles.

Par curiosité, je me demande s’il existe un moyen de résumer ces deux boucles en une seule ?

LysPrintemps

Oui mais au final ça revient au même en terme de nombre d’opération. Et ça évite de complexifier la logique.

    $width = imagesx($img);
    $max = $width * imagesy($img);
    for ($i = 0, $x = 0, $y = 0; $i < $max; $i++, $x = $i % $width, $y = ($i - $x) / $width)
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte