|
|
|
| Привет! У меня такая задача - вытащить из базы данных названия файлов фотографий (сами ж фотографии сохраняются в папке) и уменьшить их для удобства просмотра. Без применения imagecreatefromjpeg вытаскивает из базы нормально, только пытаюсь оптимизировать функцию на уменьшения размера фотографий - в качестве результата плучаю Resourse id#7. Как правильно использовать imagecreatefromjpeg, чтоб получить необходимый результат.
Код без imagecreatefromjpeg
function img_watch_process()
{
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`, `father_name`, `father_surname`, `file_name1`, `file_name2`, `file_name3` from `contact_info` where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
$file_name1=$data['file_name1'];
$file_name2=$data['file_name2'];
$file_name3=$data['file_name3'];
}
$current_dir = 'uploads/';
$dir = opendir($current_dir);
$photo1 = '\/'.$file_name1;
$photo2 = '\/'.$file_name2;
$photo3 = '\/'.$file_name3;
while ($file = readdir($dir))
{
$table.= "<img src=\"$current_dir$file$photo1\" alt=\"photo1\"></br></br>";
$table.= "<img src=\"$current_dir$file$photo2\" alt=\"photo2\"></br></br>";
$table.= "<img src=\"$current_dir$file$photo3\" alt=\"photo3\">";
}
$table.= '</ul>';
closedir($dir);
return $table;
}
Спасибо заранее | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 12:52)
| | Функция imagecreatefromjpeg() возвращает дескриптор, чтобы сохранить его нужно воспользоваться функцией imagejpeg(). Если второй параметр этой функции не указан, изображение выводится в поток, если передать имя файла, оно будет сохранено в файл с этим именем. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 13:06)
| | вот такая запись есть
header('Content-Type: image/jpeg');
$img = img_watch_process($file_name1);
imagejpeg($img);
imagedestroy($img);
Куда ее вставить: 1 - в функцию, 2 - в обработчик (index.php)?
О каком втором параметре вы говорите? | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 13:16)
| | Функция с imagecreatefromjpeg
function img_watch_process($file_name1)
{
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`, `father_name`, `father_surname`, `file_name1`, `file_name2`, `file_name3` from `contact_info` where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
$table="<h3>Фотографии {$_POST['surname']}</h3></br>";
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
$file_name1=$data['file_name1'];
}
$table.= @imagecreatefromjpeg("uploads/$file_name1");
return $table;
и вывод (в index.php)
header('Content-Type: image/jpeg');
$img = img_watch_process($file_name1);
imagejpeg($img);
imagedestroy($img); | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 13:21)
| | Нет, так не получится. Одно изображение - один файл, на который из HTML-кода можно сослаться при помощи тэга <img>. Поэтому если вы хотите динамически формировать изображение, этот скрипт нужно создать отдельно от вывода HTML-кода и ссылаться на него из атрибута src img-тэга. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 13:39)
| | как вы заметили во втором виде функции тега img вообще нет, так как запись imagecreatefromjpeg("uploads/$file_name1") спокойно открывает папку и достает изображение. | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 13:43)
| | imagecreatefromjpeg("uploads/$file_name1") спокойно открывает папку и достает изображение при условии, что нет sql запроса, тоесть в отдельном файле проверяла - работает, с базой данных не хочет взаимодействовать. | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 13:43)
| | >как вы заметили во втором виде функции тега img вообще нет, так как запись
>imagecreatefromjpeg("uploads/$file_name1") спокойно открывает папку и достает изображение.
Его там и не должно быть, этот тэг должен быть там, где вам необходимо вывести изображение, путь к скрипту следует подставить src.
>спокойно открывает папку и достает изображение.
И кроме изображения этот скрипт ничего вывести не сможет. Как ничего кроме изображения не сможет вывести файл image.jpg, чтобы комбинировать изображения и текст необходимо использовать тэг <img> | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 14:59)
| | Так что-то вроде такого надо записать <img src="imagecreatefromjpeg("uploads/$file_name")" /> ? | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 15:28)
| | Нет, нужно написать, что-то вроде такого
<img src="image.php?id=345" />
| где image.php - скрипт, который выводит вам нужное изображение с header(), imagecreatefromjpeg() и пр. Т.е. скрипта как минимум должно быть два: один формирует изображение нужного вам размера, другой выводит его при помощи <img>. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 15:36)
| | Правильно я поняла:
src указала на resize.php,
в resize.php не хочет взаимодействовать с mysql. Посмотрите такая запись правильная?
function resize($file_name)
{
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`, `father_name`, `father_surname`, `file_name1`, `file_name2`, `file_name3` from `contact_info` where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
$table="<h3>Фотографии {$_POST['surname']}</h3></br>";
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
$file_name1=$data['file_name1'];
$file_name2=$data['file_name2'];
$file_name3=$data['file_name3'];
}
$table= @imagecreatefromjpeg("uploads/$file_name1");
$table.= @imagecreatefromjpeg("uploads/$file_name2");
$table.= @imagecreatefromjpeg("uploads/$file_name3");
return $table;
}
header('Content-Type: image/jpeg');
$img = resize($file_name1);
$img. = resize($file_name2);
$img. = resize($file_name3);
imagejpeg($img);
imagedestroy($img); | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 15:49)
| | >Правильно я поняла:
>src указала на resize.php,
>в resize.php не хочет взаимодействовать с mysql.
Совершенно верно.
>$table= @imagecreatefromjpeg("uploads/$file_name1");
>$table.= @imagecreatefromjpeg("uploads/$file_name2");
>$table.= @imagecreatefromjpeg("uploads/$file_name3");
Один скрипт - один файл. У вас их тут три штуки. Все очень просто файл resize.php представляет собой один image.jpg. По сути вам нужно что-то вроде этого
<img src='resize.php?name=file_name1'>
<img src='resize.php?name=file_name2'>
<img src='resize.php?name=file_name3'>
| а resize.php изменить так
function resize($file_name)
{
$file_name = mysql_escape_string($file_name);
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`,
`father_name`, `father_surname`, `file_name1`,
`file_name2`, `file_name3` from `contact_info`
where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
$table="<h3>Фотографии {$_POST['surname']}</h3></br>";
$data=mysql_fetch_array($result);
return @imagecreatefromjpeg("uploads/".$data[$file_name]);
}
header('Content-Type: image/jpeg');
$img = resize($_GET['name']);
imagejpeg($img);
imagedestroy($img);
|
| |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 15:59)
| | сделала, не получилось.
Может в function.php, где у меня все функци записано вот так.
function img_watch_process()
{
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`,
`father_name`, `father_surname`, `file_name1`,
`file_name2`, `file_name3` from `contact_info`
where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
$table="<h3>Фотографии {$_POST['surname']}</h3></br>";
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
//$file_name1=$data['file_name1'];
//$file_name2=$data['file_name2'];
//$file_name3=$data['file_name3'];
}
$table.= "<img src='resize.php?name=file_name1' alt='photo1'></br></br>";
$table.= "<img src='resize.php?name=file_name2' alt='photo2'></br></br>";
$table.= "<img src='resize.php?name=file_name3' alt='photo3'>";
return $table;
}
|
| |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 16:13)
| | Вызовите сначала resize.php?name=file_name1 в окне браузера, чтобы убедиться, что он работает и выводит изображение. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 16:28)
| | не работает | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 16:30)
| | Как у вас сейчас выглядит содержимое resize.php? | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 16:32)
| | resize.php
function resize($file_name)
{
$file_name = mysql_escape_string($file_name);
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`,
`father_name`, `father_surname`, `file_name1`,
`file_name2`, `file_name3` from `contact_info`
where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
$data=mysql_fetch_array($result);
return @imagecreatefromjpeg("uploads/".$data[$file_name]);
}
header('Content-Type: image/jpeg');
$img = resize($_GET['file_name']);
imagejpeg($img);
imagedestroy($img);
|
function.php
function img_watch_process()
{
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`,
`father_name`, `father_surname`, `file_name1`,
`file_name2`, `file_name3` from `contact_info`
where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
$file_name1=$data['file_name1'];
$file_name2=$data['file_name2'];
$file_name3=$data['file_name3'];
}
$table.= "<img src='resize.php?name=file_name1' alt='photo1'></br></br>";
$table.= "<img src='resize.php?name=file_name2' alt='photo2'></br></br>";
$table.= "<img src='resize.php?name=file_name3' alt='photo3'>";
return $table;
}
|
index.php - обработчик всех функций
if ($_GET['action']=='surname_img')
{
//Просмотр фотографии
echo img_watch_process();
}
|
| |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 16:41)
| | У вас функция $_POST['surname'] - зависит от POST-данных, скрипт resize.php их не получает (браузер к resize.php обращается независимо от index.php в отдельном потоке), эти данные нужно передать в resize.php через GET-параметры, по аналогии с параметром name и задействовать в SQL-запросе. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 16:44)
| | буду пробовать уже вечером. Как вас зовут? | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 16:49)
| | Зовут меня Игорь, более подробную информацию можно найти в профиле. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 16:53)
| | А я то думаю, чего вы на меня времени столько потратили))). Спасибо огромное Игорь, я совсем еще зелененький программист, но быстро учусь. Если вы сможете мне еще писать, буду благодарна за советы. Сейчас мне надо уйти, но вечером вернусь и проверю глобальные массивы. Меня зовут Александра кстати. Хорошего дня. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 16:53)
| | Не получилось с $_GET, меняла в функции, которая передает значение фамилии на img_watch_process() и в этой меняла и в resize.php - результат - возвращает на главную старницу. | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 23:20)
| | Как resize.php сейчас выглядит? | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 23:24)
| |
function resize($file_name)
{
$file_name = mysql_escape_string($file_name);
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`,
`father_name`, `father_surname`, `file_name1`,
`file_name2`, `file_name3` from `contact_info`
where `surname`='".$_GET['surname']."'";
$result = mysql_query($sql);
$data=mysql_fetch_array($result);
return @imagecreatefromjpeg("uploads/".$data[$file_name]);
}
header('Content-Type: image/jpeg');
$img = resize($_GET['file_name']);
imagejpeg($img);
imagedestroy($img);
|
| |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 23:40)
| | Вызов скрипта из строки запроса что-нибудь дает?
resize.php?name=file_name1&surname=ЗдесьФамилиюИзcontact_info | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 23:43)
| | вызов resize.php дает по центру пустой прямоугольник с надписью Изображение | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 23:48)
| | Значение в GET-параметре surname точно существует в базе данных? | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 23:24)
| | а functions.php
function img_watch_process()
{
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`,
`father_name`, `father_surname`, `file_name1`,
`file_name2`, `file_name3` from `contact_info`
where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
$file_name1=$data['file_name1'];
$file_name2=$data['file_name2'];
$file_name3=$data['file_name3'];
}
$table.= "<img src='resize.php?name=$file_name1&"."name=".$_POST['surname']."' alt='photo1'></br></br>";
$table.= "<img src='resize.php?name=$file_name2&"."name=".$_POST['surname']."' alt='photo2'></br></br>";
$table.= "<img src='resize.php?name=$file_name3&"."name=".$_POST['surname']."' alt='photo3'>";
return $table;
}
|
Я не знаю, можно ли так записать в ссылку $_POST запрос? А может нужно указать переменную $file_name1... иначе в ссылке получим только текст, а не значение из бд!? | |
|
|
|
|
|
|
|
для: padalka
(16.06.2011 в 23:46)
| | Вы два раза передаете один и тот же GET-параметр name, первый должен быть name, второй surname
$table.= "<img src='resize.php?name=$file_name1&".
"surname=".urlencode($_POST['surname'])."' alt='photo1'></br></br>";
|
>Я не знаю, можно ли так записать в ссылку $_POST запрос?
Можно, но лучше его пропустить через urlencode(), особенно, если это русские фамилии. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 23:54)
| | исправила, по-прежнему ничего. Теперь функция img_watch_process выглядит так:
mysql_connect("localhost", "root", "");
mysql_select_db('rod');
$sql="select `mother_name`, `mother_surname`, `father_name`, `father_surname`, `file_name1`, `file_name2`, `file_name3` from `contact_info` where `surname`='".$_POST['surname']."'";
$result = mysql_query($sql);
while ($data=mysql_fetch_array($result))
{
$mother_name=$data['mother_name'];
$mother_surname=$data['mother_surname'];
$father_name=$data['father_name'];
$father_surname=$data['father_surname'];
$file_name1=$data['file_name1'];
$file_name2=$data['file_name2'];
$file_name3=$data['file_name3'];
}
$table.= "<img src='resize.php?name=$file_name1&"."surname=".urlencode($_POST['surname'])."' alt='photo1'></br></br>";
$table.= "<img src='resize.php?name=$file_name2&"."surname=".urlencode($_POST['surname'])."' alt='photo2'></br></br>";
$table.= "<img src='resize.php?name=$file_name3&"."surname=".urlencode($_POST['surname'])."' alt='photo3'>";
}
return $table;
|
| |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:03)
| | Правильно ли я понимаю, когда у нас обработчик доходит до
$table.= "<img src='resize.php?name=$file_name1&"."surname=".urlencode($_POST['surname'])."' alt='photo1'></br></br>";
| , то он переходит на resize.php и при этом в $_GET массиве передает значение файла и фамилии, которые и получает resize.php, вытаскивает из папки фото и уменьшает его? | |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:08)
| | но нам же фамилию не обязательно передавать в resize.php так как если выбрались значения файлов, то они выбрались из определенной фамилии. Тоесть, нам даже и не надо наверное подключаться к бд в resize.php, ведь если у нас есть названия файлов, то imagecreatefromjpeg должна их достать. | |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:15)
| | Игорь, может каким-то другим способом можно уменьшить фотографию пропорционально? У меня уже сил не хватает(((( | |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:21)
| | я спать, спасибо за сегодняшние попытки))))) Утро вечера мудренней))) спокойной ночи | |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:21)
| | >Игорь, может каким-то другим способом можно уменьшить фотографию пропорционально? У
>меня уже сил не хватает((((
Собственно, я пока даже не вижу где у вас происходит уменьшение изображения... пока только динамический вывод. Обычно изображения уменьшают при загрузке (так как динамическое уменьшение потребляет очень много ресурсов), сохраняют ссылку на уменьшенное изображение в базе данных и при выводе ссылаются на него.
В теме по ссылке можно найти функцию для уменьшения изображения http://softtime.ru/forum/read.php?id_forum=1&id_theme=145. | |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:15)
| | >но нам же фамилию не обязательно передавать в resize.php так как если выбрались значения
>файлов, то они выбрались из определенной фамилии. Тоесть, нам даже и не надо наверное
>подключаться к бд в resize.php, ведь если у нас есть названия файлов, то imagecreatefromjpeg
>должна их достать.
В сообщении от padalka (16.06.2011 в 23:40) у вас в resize.php имеется SELECT-запрос с WHERE-условием, где используется $_GET['surname'], если этот GET-параметр resize.php не передать, запрос не сработает. Судя по всему он с передачей не срабатывает, поэтому нужно сосредоточиться в первую голову на нем. Для этого его нужно запустить (со всеми нужными ему параметрами) и отладить отдельно от functions.php. | |
|
|
|
|
|
|
|
для: padalka
(17.06.2011 в 00:08)
| | >Правильно ли я понимаю, когда у нас обработчик доходит до
Совершенно верно.
Первое что нужно сделать, это взять строку (в конечном варианте из HTML-кода)
resize.php?name=$file_name1&"."surname=".urlencode($_POST['surname'])."
| и добиться, чтобы по этому адресу открывалось изображение. Потом уже возвращаться к functions.php. | |
|
|
|