Подскажите пожалуйсте как реализовать следующие: Есть 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)); }} Картинки в таблице размещены таким образом
А зачем столько много запросов к БД? ) Сделай выборку всех картинок. Потом в цикле просто помещай каждую на свое место.
можно запрос к базе перенести с под цикла но проблема остается...все картинки по идеи должны помещаться в изображение vivod.jpg соответственно под своимы координатами...которые задаются при расположении через функцию imagecopy ($image, $pictures, $h, $w, 0, 0, 10, 10); где $h, $w и есть координаты x,y но почему то картинки не сохраняются в данном файле...и данный файл отсутствует на сервер после работы данной части кода...помогите пожалуйста
Смотрите внимательней что в переменной $pictures. Когда указываешь переменные в функциях двойные ковычки не нужны. Убрать @ перед imagecreate $image = imageCreateFromJpeg("$image"); Функция создает из файла, но вы ей указали Id на ресурс из предыдущей функции: $image = @imagecreate ("$w_src", "$h_src"); Не используйте одинаковые название переменных. Так же и тут $pictures = imageCreateFromJpeg("$pictures"); Называйте переменные осмысленно. Например для названия файла ( путь к файлу ) $pictures_File для ресурса - $pictures_res
Вообщем идея такая 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'], 0, 0, 10, 10); // Выгружаем картину imagedestroy( $image_small ); } // Сохраняем большую картину в файл imagejpeg( $image_big, 'result.jpg' ); // Выгружаем картину imagedestroy( $image_big );
спасибо вам огромное...буду тестировать....вообще пишу скрипт что то вроди "подбора картинок превью согласно цвета пикселей" если все будет норма обязательно выложу в паблик...может кому и понадобиться
спасибо очень помог ваш код....картинка создается....размещение картинок по координатам x y делается. Только если можно посоветуйте что исправить что бы картинки выводились в размере по 10 пикселей, сейчас выводиться вроде по одному: пробовал внести под цикл $row['x']+=10; $row['y']+=10; что бы координаты вставляемой картинки смещались на 10 пикселей но результат: если можно подскажите как сделать что бы выводилось
Проблема скорее всего в том, что координаты картинок в БД располагаются не так, как нужно. Из вашего скрина БД, видно, что некоторые картинки имеют или одинаковый X или X "рядом с картинкой". Т.е. если картинки имеют размер 10x10, то X и Y должны быть строго кратны 10. И не могут быть равны, например 18 ) Если их выкладывать по координатам, то нужно варианта не получится. Да и конечный размер картинки нужно или задавать вручную, или хотябы установить ширину. Вечером могу написать.
получилось вывести изображение внеся под цикл $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) / / Конец вывода Получилось: Спасибо вам огромное за помощь, за предоставленный код, и советы. Очень долго возился с этим, не знал как сделать, ваш код мне очень помог.