разместить маленькие картинки на большую по координатах

Discussion in 'PHP' started by maxy666, 25 Mar 2013.

  1. maxy666

    maxy666 New Member

    Joined:
    17 Jul 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Подскажите пожалуйсте как реализовать следующие:
    Есть url картинок (700 шт) в базе данных (размер картинок 10х10), так же в отдельных колонках записаны координаты их размещение (X,Y). На выходе хотел бы получить изображение 700х100.


    Попробовал через функцию imagecopy реализовать. Но почету то картинка не сохраняется на сервер
    Подскажите пожалуйста что сделал не так

    Code:
    // Цикл прогона по x y
    for( $h = 1; $h <= $h_src; $h=$h+10 ){
    for( $w = 1; $w <= $w_src; $w=$w+10 )
    {
    
    do
    {
    // Запрос к базе на вибору определеной картинки с нужными координатами
    $str_sql_query = mysql_query( "SELECT * FROM `image` WHERE `x` = '{$w}' And `x` = '{$h}' ");
    $myrow = mysql_fetch_array ($str_sql_query); 
    // Заношу адрес картинки в переменную pictures
    $pictures= $myrow['url'];
    // Создаю какртинку с нужного размера, что бы на ней поместились картинки
    $image = @imagecreate ("$w_src", "$h_src");
    $image = imageCreateFromJpeg("$image");
    $pictures = imageCreateFromJpeg("$pictures");
    imagecopy ($image, $pictures, $h, $w, 0, 0, 10, 10);
    imagejpeg ($image,"vivod.jpg");
    }
    while ($myrow = mysql_fetch_array ($str_sql_query));
    }}
    
    Картинки в таблице размещены таким образом
    [​IMG]
     
  2. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    А зачем столько много запросов к БД? )
    Сделай выборку всех картинок. Потом в цикле просто помещай каждую на свое место.
     
  3. maxy666

    maxy666 New Member

    Joined:
    17 Jul 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    можно запрос к базе перенести с под цикла но проблема остается...все картинки по идеи должны помещаться в изображение vivod.jpg соответственно под своимы координатами...которые задаются при расположении через функцию imagecopy ($image, $pictures, $h, $w, 0, 0, 10, 10); где $h, $w и есть координаты x,y
    но почему то картинки не сохраняются в данном файле...и данный файл отсутствует на сервер после работы данной части кода...помогите пожалуйста
     
  4. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Смотрите внимательней что в переменной $pictures.
    Когда указываешь переменные в функциях двойные ковычки не нужны.
    Убрать @ перед imagecreate
    $image = imageCreateFromJpeg("$image");
    Функция создает из файла, но вы ей указали Id на ресурс из предыдущей функции:
    $image = @imagecreate ("$w_src", "$h_src");

    Не используйте одинаковые название переменных.
    Так же и тут $pictures = imageCreateFromJpeg("$pictures");
    Называйте переменные осмысленно.
    Например для названия файла ( путь к файлу ) $pictures_File для ресурса - $pictures_res
     
  5. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Вообщем идея такая

    PHP:
    // Выбираем максимальный X и Y
    $result mysql_query('SELECT MAX(x), MAX(y) FROM table');
    $row mysql_fetch_assoc($result);
    // Определяем будущий размер большой картинки 
    $bigW $row['x'] + 10
    $bigH $row['y'] + 10;

    // Создаем пустое изображение ( Для большой картинки )
    $image_big imagecreatetruecolor($bigW$bigH); 

    // Выполняем SQL запрос на получение картинок и их координат
    $result mysql_query('SELECT * FROM table');
    while( 
    $row mysql_fetch_assoc($result) ) {
        
    // Загружаем картинку из файла 
        
    $image_small imagecreatefromjpeg$row['url_image'] ); 
        
        
    // Помещаем картину на большую:
        
    imagecopy($image_big$image_small$row['x'], $row['y'], 001010);
        
        
    // Выгружаем картину
        
    imagedestroy$image_small );
    }
    // Сохраняем большую картину в файл
    imagejpeg$image_big'result.jpg' ); 

    // Выгружаем картину
    imagedestroy$image_big ); 
     
    #5 LStr1ke, 25 Mar 2013
    Last edited: 25 Mar 2013
  6. maxy666

    maxy666 New Member

    Joined:
    17 Jul 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    спасибо вам огромное...буду тестировать....вообще пишу скрипт что то вроди "подбора картинок превью согласно цвета пикселей" если все будет норма обязательно выложу в паблик...может кому и понадобиться
     
  7. maxy666

    maxy666 New Member

    Joined:
    17 Jul 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    спасибо очень помог ваш код....картинка создается....размещение картинок по координатам x y делается.
    Только если можно посоветуйте что исправить что бы картинки выводились в размере по 10 пикселей, сейчас выводиться вроде по одному: [​IMG]
    пробовал внести под цикл
    $row['x']+=10;
    $row['y']+=10;
    что бы координаты вставляемой картинки смещались на 10 пикселей
    но результат:
    [​IMG]
    если можно подскажите как сделать что бы выводилось
    [​IMG]
     
  8. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Проблема скорее всего в том, что координаты картинок в БД располагаются не так, как нужно. Из вашего скрина БД, видно, что некоторые картинки имеют или одинаковый X или X "рядом с картинкой".
    Т.е. если картинки имеют размер 10x10, то X и Y должны быть строго кратны 10. И не могут быть равны, например 18 )
    Если их выкладывать по координатам, то нужно варианта не получится. Да и конечный размер картинки нужно или задавать вручную, или хотябы установить ширину.
    Вечером могу написать.
     
  9. maxy666

    maxy666 New Member

    Joined:
    17 Jul 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    получилось вывести изображение внеся под цикл
    $rozm_x = $row ['x'] * 10;
    $rozm_y = $row ['y'] * 10;

    PHP:
    / / Начало вывода изображений
    / / Определение размеров изображения imagedlabodbora и занесения ее в переменные $x_src и $y_src
    $image_dlabodbora 
    'imagedlapodbora/20130324232540671.jpg';
    $image_dlabodbora imageCreateFromJpeg ("$image_dlabodbora");
    $x_src imagesx ($image_dlabodbora)
    $y_src imagesy ($image_dlabodbora)
    / / 
    Определение размеров будущего изображения в 10 раз бильшил чем imagedlapodbora
    $x_src 
    $x_src 10;
    $y_src $y_src 10;

    / / 
    Создаем пустое изображение
    $image_big 
    imagecreatetruecolor ("$x_src""$y_src");

    / / 
    Выполняем запрос на получение картинок и координат
    $result 
    mysql_query ("SELECT * FROM` imagedlapodbora `');
    while (
    $row = mysql_fetch_assoc ($result)) {
    / / Загружает картинку по url из файла
    $image_small = $row ['url_image'];


    $image_small = imagecreatefromjpeg ($image_small)
    / / Определяем ее размещения
    $rozm_x = $row ['x'] * 10;
    $rozm_y = $row ['y'] * 10;
    / / Помещаем маленькую картинку на большую с нужными коордиатамы.
    / * Подробнее о параметрах функции imagecopy ('1: Изображение на которое копировать ', '2: Изображение которое копировать', '3: Размещение изображения по x ', '3: Размещение изображения по x', * /
      imagecopy (
    $image_big$image_small$rozm_x$rozm_y, 0, 0, 10, 10);
         
    / / Выгружаем картинку
         imagedestroy (
    $image_small)
    }
    / / Зберигаеем картинку в файл
    imagejpeg (
    $image_big, "result.jpg ');

    / / Выгружаем картину
    imagedestroy ($image_big)
    / / Конец вывода
    Получилось:
    [​IMG]

    Спасибо вам огромное за помощь, за предоставленный код, и советы. Очень долго возился с этим, не знал как сделать, ваш код мне очень помог.
     
    #9 maxy666, 26 Mar 2013
    Last edited: 26 Mar 2013