ФорумПрограммированиеPHP для идиотов → imagecopyresized

imagecopyresized

  • Chup_zZz

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

    Spritz 29 января 2008 г. 8:56

    Доброго времени суток!
    Заметил, что не обсуждалась данная функция ещё на форуме, стало интересно, работал я с ней однажды, но не совсем она корректно работала (или руки криво написали, то что голова криво спроэктировала).
    в общем функция imagecopyresized - знаете для чего создана а, если кто не знает, то она принемает в себя 10 параметров и на выходе дает изображение (какие параметры перечислять сейчас не стану, в мануале есть всё о них),
    Надо мной повисла задача, вернее даже не задача а идея сделать то, что другими уже делалось, но мне захотелось самому, сделать динамический аватар т.е. чтоб его отображение на форуме менялось каждый раз.
    Имеем :
    -функцию imagecopyresized;
    -2 картинки с именами 1.png и 2.png (16 х16 точек);
    -картинку изображения декорируещего (128 на 128 пикселов, оно просто в конце генерации накладываеться наверх полученной матрицы)

    Требуеться :
    -получить картинку, в формате .png, которая на фоне будет иметь сменный масив 8 на 8 элементов, а впереди будет накладываться "слой-подпись" с именем пользователя.

    Решение:
    Ниже я разместил код скрипта, которым как я думал, я расщитаю всё, но, работа данного скрипта прерываеться по таймауту максимального времени выполнения скрипта.
    У кого какие идеи-предложения???

    <?php

    function GenerateBackgrnd (){

    //——————————————————————
    // Создание ВСЕХ необходимых параметров
    //——————————————————————

    $ieW=16; $ieH=16;
    $backimg = array (64);

    //——– генратор случайных чисел ——————————-

    mt_srand(time()+(double)microtime()*1000000);

    //——————————————————————

    $background = imagecreate(128,128); //Основной фон
    $backgroundsrc = array();  //массив "донорских" изображений
    //——————————————————————
    //Формирование массива с числами 1 по 256
    //——————————————————————
    for ($i=0;$i<64;$i++)
    {
    $backgroundsrc[]=(mt_srand(1,0).'.png');
    }
    for ($x=0;$x<8;$x++)
    {
    for ($y=0;$y<8;$y++)
    {
    for ($count=0;$count<256;$count++)
    {
    // $currentsrc = imagecreate(16,16);
    // imagecopyresized (  dst_img;       src_img;          DstX;              DstY;             srcX;     SrcY;      DstH;       DstW;       SrcW;      SrcH; )

           imagecopyresized ($backgroundimage,($backgroundsrc[$count]),($x*16),           ($y*16),              0   ,    0     ,    16   ,       16   ,      16   ,    16  );

    }
    }
    return $backgroundimage;
    }
    // конец функции генерящей картинк
    }

    function ShowImage ()
    {
    $backgroundimage =  imagecreate(128,128);
    $foregroundimage =  imagecreatefrompng("http://localhost/images/foreground.png");
    $zero = imagecreatefrompng("http://localhost/images/1.png");
    $nul  = imagecreatefrompng("http://localhost/images/0.png");
    //GenerateBackgrnd();
    // imagecopyresized (  dst_img;       src_img;  DstX;         DstY;            srcX;     SrcY;      DstH;      DstW;      SrcW;     SrcH; )
    return  imagecopyresized (GenerateBackgrnd(),($foregroundimage),(0),           (0),              0   ,    0     ,    128   ,    128   ,    128   ,   128  );
    }

    print ShowImage();

    ?>

  • TRIAL

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

    Spritz 29 января 2008 г. 9:10, спустя 14 минут 5 секунд

    Чего-то так всё наворочено, непонятно зачем.
    Кстати так и не понял чего ты вобще сделать хотел. Создать изображение используя картинку с фоном, аватарку и поверх этого чей-то ник.
    Тогда мне кажется это можно сделать проще.
    Кстати если я не путаю, то вместо …resize рекомендуется пользовать …resample
    from TRIAL with LOVE
  • Chup_zZz

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

    Spritz 29 января 2008 г. 9:23, спустя 12 минут 55 секунд

    понял, что наворотил х.з. что
    попробую перефразировать:
    есть картинка 128 на 128 с прозрачным слоем foreground.png
    есть 2 картинки с изображениями "1" и "0" соответственно так и называються , их размер 16 на 16
    надо сформировать массив 8 на 8 (двумерный массив, но так как я не могу тольком разобраться в двумерных массивах, я юзаю 1-н просто его длина равна не 8*8 а 1*64 елемента), причем каждая картинка идет за предыдущей, ну вот так :
    0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7
    1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7
    2,0 2,1 2,2 2,3 2,4 …….. - ну и так до 7,7 - пока пальцы не позеленели
    в общем матрица получаеться а вместо каждого из её елементов надо запихнуть картинку 0 или 1 (но это рандомно определяеться с помощью mt_rand), а поверх получившегося, наложить картинку - прозрачный слой с именем, и эту всю "радость" вывести в браузер.
  • adw0rd

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

    Spritz 29 января 2008 г. 10:46, спустя 1 час 22 минуты 47 секунд

    <?php

    function GenerateBackgrnd() {

    $ieW = 16; $ieH = 16;
    $backimg = array(64);

    /* нахуй тут "генератор"? */
    mt_srand(time() + (double)microtime() * 1000000);

    $background = imagecreate(128, 128); //Основной фон
    $backgroundsrc = array(); //массив донорских изображений

    //Формирование массива с числами 1 по 256
    for($i = 0;$i < 64;$i++) {
    $backgroundsrc[] = (mt_srand(1, 0) . '.png');
    }

    for($x = 0;$x < 8;$x++) {
    for($y = 0;$y < 8;$y++) {
    for($count = 0;$count < 256;$count++) {
    imagecopyresized($backgroundimage, ($backgroundsrc[$count]), ($x * 16), ($y * 16), 0, 0, 16, 16, 16, 16);
    }
    }
    return $backgroundimage;
    }
    }

    function ShowImage()
    {
    $backgroundimage = imagecreate(128, 128);
    $foregroundimage = imagecreatefrompng("http://localhost/images/foreground.png");
    $zero = imagecreatefrompng("http://localhost/images/1.png"); /* а зачем создаешь, если не используешь? */
    $nul = imagecreatefrompng("http://localhost/images/0.png"); /* а зачем создаешь, если не используешь? */

    return imagecopyresized(GenerateBackgrnd(), $foregroundimage, 0, 0, 0, 0, 128, 128, 128, 128);
    }

    print ShowImage();

    ?>


    Кароче думал, думал… что ты хотел вообще сделать, так и не понял, а код вообще - не код.
    Вот тебе пример с http://ru2.php.net/imagecopyresized, Что непонятного в ф-ии я так и не смог понять, все там нормально и понятно.

    <?php
    // File and new size
    $filename = 'test.jpg';
    $percent = 0.5;

    // Content type
    header('Content-type: image/jpeg');

    // Get new sizes
    list($width, $height) = getimagesize($filename);
    $newwidth = $width * $percent;
    $newheight = $height * $percent;

    // Load
    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filename);

    // Resize
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    // Output
    imagejpeg($thumb);
    ?>
    adw/0
  • Chup_zZz

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

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

    блин, не могу мозг включить никак, но, сделаю - покажу 100% и на аватар тут себе добавлю, щас поднапрягусь и выложу.
    Подумал, помотерл - куд внатуре херня редкая, а у меня подобный код работал, ну лан - намалюю - - покажу.

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