|
|
|
|
|
для: Trianon
(30.06.2007 в 21:40)
| | После соединения двух скриптов, которые приводил выше, у меня получился такой сценарий.
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
echo "<form enctype='multipart/form-data' method=post>
<input type='file' name='image'><br>
<input type=submit value='Загрузить'>
</form>";
// Число изображений на странице
$pnumber = 3;
// Обработчик HTML-формы
if(!empty($_FILES))
{
// Проверяем, является ли переданный файл изображением
if(substr($_FILES['image']['type'],0,5) == 'image')
{
################################################
// Обработка размера изображения
$image = $_FILES['image']['tmp_name'];
if (!$max_width)
$max_width = 80;
if (!$max_height)
$max_height = 60;
$size = GetImageSize($image);
$width = $size[0];
$height = $size[1];
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) ) {
$tn_width = $width;
$tn_height = $height;
}
else if (($x_ratio * $height) < $max_height) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else {
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$src = ImageCreateFromJpeg($image);
$dst = ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0,
$tn_width,$tn_height,$width,$height);
##################################################
// Читаем содержимое файла
$content = file_get_contents($dst);
// Уничтожаем файл во временном каталоге
unlink($_FILES['image']['tmp_name']);
// Экранируем спецсимволы в бинарном содержимом файла $content
$content = mysql_escape_string($content);
// Формируем запрос на добавление файла в таблицу
$query = "INSERT INTO fusion_image_mysql VALUES(NULL,
'".$_FILES['image']['name']."',
'$content')";
if(mysql_query($query))
{
// Осуществляем автоматическую перезагрузку страницы и выводим изображение
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
} else exit(mysql_error());
}
}
?>
|
Но после обработки изображения и уменьшения в сценарии размеров JPEG фотографии,
я не могу прочитать уменьшенное изображение функцией file_get_contents(); в бинарное содержимое, для дальнейшей отправки в базу данных.
Пробовал подставлять в неё и идентификатор уменьшенного изображения $dst ( ошибка ), и созданное изображение из идентификатора ImageJpeg($dst) ( ошибка). Очевидно идентификатор переменную $dst нужно или перекодировать, или читать какой то другой функцией перед отправкой в базу данных? Применить функцией imagecreatefromstring(); тоже не получилось. Подскажите кто знает. | |
|
|
|
|
|
|
|
для: olegat
(30.06.2007 в 13:42)
| | Вам поможет функция ImageCreateFromString()
Она позволяет загрузить тело файла изображения из переменной. | |
|
|
|
|
|
|
|
для: olegat
(30.06.2007 в 13:42)
| | а не легче при показе превью уменьшать размер... да и хранить бинарные данные в БД - особенно мускуле - не особенно рекомендуют... лучше в БД хранить путь к картинке на HDD - меньше проблем. | |
|
|
|
|
|
|
| Запустил скрипт хранения изображения в базе данных из книги «Народные советы».
Скрипт работает отлично, но попытки изменить на лету размеры изображения перед загрузкой в базу данных не удались. Это нужно для создания превью для фотогалереи.
Фрагмент срипта загрузки изображения в базу данных :
<form enctype='multipart/form-data' method=post>
<input type="file" name="image"><br>
<input type=submit value='Загрузить'>
</form>
<?php
// Число изображений на странице
$pnumber = 3;
// Устанавливаем соединение с базой данных
require_once("config.php");
// Обработчик HTML-формы
if(!empty($_FILES))
{
// Проверяем, является ли переданный файл изображением
if(substr($_FILES['image']['type'],0,5) == 'image')
{
// Читаем содержимое файла
$content = file_get_contents($_FILES['image']['tmp_name']);
// Уничтожаем файл во временном каталоге
unlink($_FILES['image']['tmp_name']);
// Экранируем спецсимволы в бинарном содержимом файла
$content = mysql_escape_string($content);
// Формируем запрос на добавление файла в таблицу
$query = "INSERT INTO image VALUES(NULL,
'".$_FILES['image']['name']."',
'$content')";
if(mysql_query($query))
{
// Осуществляем автоматическую перезагрузку страницы
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
} else exit(mysql_error());
}
}
// Проверяем, передан ли номер текущей страницы
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;
// Начальная позиция
$start = (($page - 1)*$pnumber + 1);
// Выводим список файлов
$query = "SELECT * FROM image LIMIT $start, $pnumber";
$img = mysql_query($query);
if(!$img) exit(mysql_error());
// Если имеется хотя бы одна запись,
// выводим ее
if(mysql_num_rows($img) > 0)
{
while($image = mysql_fetch_array($img))
{
echo "<img src=get.php?id_image=$image[id_image]> ";
}
}
echo "<br><br>";
?>
|
В него хотел вставить скрипт обработки изображения на лету для создания превьюшки, сколько не пробовал, ни чего не вышло.
<?php
$image = $HTTP_GET_VARS['image'];
if (!$max_width)
$max_width = 80;
if (!$max_height)
$max_height = 60;
$size = GetImageSize($image);
$width = $size[0];
$height = $size[1];
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) ) {
$tn_width = $width;
$tn_height = $height;
}
else if (($x_ratio * $height) < $max_height) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else {
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$src = ImageCreateFromJpeg($image);
$dst = ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0,
$tn_width,$tn_height,$width,$height);
?>
|
| |
|
|
|
|