За последние 24 часа нас посетили 16856 программистов и 1647 роботов. Сейчас ищут 1008 программистов ...

PNG24. Инверсия альфа-канала

Тема в разделе "Прочие вопросы по PHP", создана пользователем kiosuki, 17 июн 2008.

  1. kiosuki

    kiosuki Активный пользователь

    С нами с:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Сразу объясню задачу. Есть PNG24 файл с изображением предмета. Все вокруг - прозрачная область. Каким образом с помощью PHP можно осуществить инверсию альфа-канала? В результате прозрачные области должны стать непрозрачными и наоборот. Т.е., пиксель с альфа-индексом 127 должен получить индекс 0, а, например, с индексом 117 - получить 10. Как это сделать? Спасибо.
     
  2. kiosuki

    kiosuki Активный пользователь

    С нами с:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Грубо говоря, нужно получить вот такой результат: [​IMG]
     
  3. NOmeR1

    NOmeR1 Активный пользователь

    С нами с:
    11 май 2008
    Сообщения:
    97
    Симпатии:
    0
    Попробуй это
    Код (Text):
    1. <?php
    2. header('Content-type: image/gif');
    3. $image = imagecreatefrompng('apple.png');
    4. $size = getimagesize('apple.png');
    5. $new_image = imagecreatetruecolor($size[0], $size[1]);
    6. for($x=0;$x<$size[0];$x++) {
    7.     for($y=0;$y<$size[1];$y++) {
    8.         $rgb = imagecolorsforindex($image, imagecolorat($image, $x, $y));
    9.         $color = imagecolorallocatealpha($new_image, ($rgb['alpha'] != 0 ? 0 : 255), ($rgb['alpha'] != 0 ? 0 : 255), ($rgb['alpha'] != 0 ? 0 : 255), ($rgb['alpha'] != 0 ? 127 : 0));
    10.         imagesetpixel($new_image, $x, $y, $color);
    11.     }
    12. }
    13. imagepng($new_image);
    14. imagedestroy($new_image);
    15. imagedestroy($image);
    16. ?>
    Начальная картинка в apple.png

    Если нужна просто инверсия альфы, замени девятую строку на
    Код (Text):
    1. $color = imagecolorallocatealpha($new_image, $rgb['red'], $rgb['green'], $rgb['blue'], 127-$rgb['alpha']);
    Но эффект будет другой