ФорумПрограммированиеПыхнуть хотите?Готовые решения → Динамический аватар

Динамический аватар

  • Chup_zZz

    Сообщения: 24 Репутация: N Группа: Кто попало

    Spritz 30 января 2008 г. 11:35

    Писал, тут я тему, про стандартную функцию в php imagecopyresized, - что-то прошлый раз у меня не сложилось с ней, вот переписал всё с другой функцией imagecopy - раздница в них только в последних двух параметрах - их не надо писать в последней функции.
    Текст скрипта небольшой, так что приведу его здесь полностью и прокомментирую:

    <?php
    header('Content-type: image/png'); //Рассккажем браузеру, что принемать будет картинку
    //———————————————————–
    // Инициализация и описание основных переменных
    //———————————————————–
    mt_srand(time()+(double)microtime()*1000000);  // - "правильная" инициализация для генератора псевдослучайных чисел

    $ForegroundImage       =  imagecreatefrompng ("foreground.png"); // Загрузка верхней картинки с прозрачным слоем, которая дает еффект блика

    $BackgroundImage       =  imagecreatetruecolor(128,128);        // Создание непосредственно картинки, в которую будет копироваться массив изображений

    $BackgroundSrc   =  array(64);
    //———————————————————–
    for ($i=1;$i<65;$i++){
    $BackgroundSrc[$i]=(imagecreatefrompng(mt_rand(0,1).'.png')); // - Заполнение массива изображениями в виде нулей и единиц с помощю генератора псевдослучайных чисел

    }

    //Теперь идет перебор по массиву, с последующим копированием меньших картинок на холст $BackgroundImage

    for ($x=1;$x<9;$x++){
    for ($y=1;$y<9;$y++){

    //Ниже идет пример функции для копирования маленьких картинок !!!Важно!!! обратите внимание, что результат работы (возвращаемый результат) - true или false - в зависимости от результата работы функции. А Источник копирования - иеднтификатор ресурса в первом параметре.


    // imagecopy (  dest_img;          src_img;             DstX;     DstY ;  srcX;  SrcY; DstH; DstW;)
           imagecopy ($BackgroundImage,$BackgroundSrc[($x*$y)] ,($x*16-16), ($y*16-16), 0   ,  0   , 16 , 16 );
    }
    }
    //Здесь по аналогии с функцией выше
               imagecopy ($BackgroundImage,$ForegroundImage,0,0,0,0,128,128);
    imagepng($BackgroundImage); //Вывод в браузер
    ?>


    Необходимо 3 картинки, 2 из них 16 на 16 пикселов и на них изображены ноль и единица, соответственно.
    И одна 128 на 128 пикселов - на ней прозрачный фон и надпись, как в моём случае. Все изображения по-умолчанию лежат в папке скрипта.
    Получим на выходе 1 картинку с динамически при каждой загрузке, изменяющимися картинками на фоне и статической подписью.
    Задачу можно усложнить добавив пару-тройку других изображений, поменяв параметры - в общем - есть поле для самодеятельности, было-бы желание.
    Не скажу что мой скрипт архисложный или  архиважный, но по-своему он мне нравиться т.к. вносит что-то непостоянное в мой аватар. Пользуйтесь если кому что надо и изменяйте его согласно лицензии GNU.
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 30 января 2008 г. 23:17, спустя 11 часов 42 минуты

    что за ублюдские отступы в коде?
    что-за пунктирные подчеркивания?
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 января 2008 г. 23:57, спустя 40 минут 10 секунд


    что-за пунктирные подчеркивания?


    думаю это "gosyntax" из-за пробельных символов напунктирил
    adw/0
  • Chup_zZz

    Сообщения: 24 Репутация: N Группа: Кто попало

    Spritz 31 января 2008 г. 3:38, спустя 3 часа 40 минут 36 секунд


    что за ублюдские отступы в коде?

    Ублюдские ? интересно выражаетесь, если я не подоставлял-бы переводов строки, то комменты повылезали-бы на код (моя Опера 9.02 отображает по крайней мере именно так)

    что-за пунктирные подчеркивания?

    А это Вы нам лучше расскажите.
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 31 января 2008 г. 4:22, спустя 43 минуты 54 секунды

    да я ж для разработчика goBBC Professional edition
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 31 января 2008 г. 4:39, спустя 16 минут 50 секунд

    Chup_zZz, товарисчь md5 хочет сказать что пост этот не вам адресовался :)
    adw/0
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 31 января 2008 г. 5:18, спустя 39 минут 5 секунд

    $i=1;$i<65;$i++

    Это только мне глаз режет что отсчет начинается с 1 а не с 0? :)

    PS. А почему бы не сделать заместо картинок с цифрами просто вывод текста, сгенерированного таким же образом. Мне кажется быстрее будет работать.
    from TRIAL with LOVE
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 31 января 2008 г. 5:56, спустя 38 минут 21 секунду

    Быстрее/не быстрее всё равно браузеры картинки кэшат :)
  • Chup_zZz

    Сообщения: 24 Репутация: N Группа: Кто попало

    Spritz 1 февраля 2008 г. 8:33, спустя 1 день 2 часа 36 минут

    adw0rd, Понял, что не мне, извините md5.
    TRIAL, $BackgroundImage,$BackgroundSrc[($x*$y)] - не с нуля потому, что если будет ноль, то при первом такте ряд не будет заполнен, так как при умножении на нуль хоть одного из членов ….. ну а чтоб не заполнять по-другому методу, т.е. не писать ещё один цыкл, я решил всё слить в один проход (аернее проходов-то два, но 2 меньше чем 3 - просто разберитесь в скрипте там ничего сложного).

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