Что я делаю не так в этом цикле для пикселей изображения? - PullRequest
2 голосов
/ 11 января 2012
<?php

$img = imagecreatefrompng("cuack.png");

$imagew = imagesx($img);
$imageh = imagesy($img);

$width = array();
$heigth = array();          
$x = 0;
$y = 0;

for ($x = 0; $x <= $imagew; $x++) {

    $rgba = imagecolorat($img,$x,1);
    $alpha = ($rgba & 0x7F000000) >> 24;

    var_dump($alpha);
}

for ($x = 0; $x <= $imageh; $x++) {

}

Я пытаюсь проверить каждый пиксель изображения на наличие прозрачных пикселей, но я получаю следующую ошибку:

Примечание: imagecolorat () [function.imagecolorat]: 1920,1 выходит за пределы в C: \ www \ index.php в строке 18

1 Ответ

6 голосов
/ 11 января 2012

Границы начинаются с 0 и, таким образом, расширяются до ширина - 1 и высота - 1 в каждом направлении.Следовательно, <= $imagew должно быть < $imagew.Аналогично для <= $imageh.

Ширина и высота просто скажут, сколько существует строк и столбцов пикселей, не максимальная строка или столбец index на один ниже).

Чтобы пройтись по всему изображению, просто используйте две вложенные петли:

for ($y = 0; $y < $imageh; $y++) {
  for ($x = 0; $x < $imagew; $x++) {
    // do whatever you want with them in here.
  }
}
...