imagesetpixel () не изменит цвет черных пикселей

Я перебираю все пиксели изображения (изображение к этому моменту гарантированно равно png, поэтому сжатие изображения в формате jpeg не учитывается), чтобы я мог изменять значения цвета для каждого пикселя. Это прекрасно работает таким образом:

$colors = imagecolorat($imageToModify, $x, $y);
$r = ($colors >> 16) & 0xFF;
$g = ($colors >> 8) & 0xFF;
$b = $colors & 0xFF;

$newR = 100;

echo "Pre: ".$newR."   ";
// will show the 100, as I changed the color

$newColor = imagecolorallocate($imageToModify, $newR, $g, $b);
imagesetpixel($imageToModify, $x, $y, $newColor);

$colors = imagecolorat($imageToModify, $x, $y);
$r = ($colors >> 16) & 0xFF;
$g = ($colors >> 8) & 0xFF;
$b = $colors & 0xFF;

echo "Post:  ".$r."   ";
// Should echo what is shown above

Это работало хорошо. Однако, скажем, значение цвета $ r исходного пикселя равно 0, подобно изображению, которое я включил в качестве приложения к этому вопросу, последняя строка эха все равно будет возвращать 0, как если бы imagesetpixel() не изменил цвет изображения.

Опять же, это делается внутри цикла следующим образом:

for($i=0;$i<strlen($binaryGiven);$i++) {

if($i == 0) {
$x = 0;
} else {
$x = $i % $width;
}

if($i == 0) {
$y = 0;
} else {
$y = $i / $width;
}

Таким образом, цикл просто проходит через пиксели, как при чтении по-английски, слева направо до конца, где он переходит на следующую строку. Я не уверен, что это актуально, но именно здесь imagesetpixel() происходит.

Опять же, это работает в любой ситуации, если только изображение не черное с 0 в качестве значений rgb. Я приложил образец изображения.

Любые идеи, почему это не работает, как описано?

все черное изображение, для которого не могут быть изменены значения пикселей

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]