Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Хранение изображения в базе данных
 
 автор: olegat   (30.06.2007 в 13:42)   письмо автору
 
 

Запустил скрипт хранения изображения в базе данных из книги «Народные советы».
Скрипт работает отлично, но попытки изменить на лету размеры изображения перед загрузкой в базу данных не удались. Это нужно для создания превью для фотогалереи.

Фрагмент срипта загрузки изображения в базу данных :



<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]>&nbsp;";
    }
  }
  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$src0000,
    
$tn_width,$tn_height,$width,$height);


?>

   
 
 автор: black_prince   (30.06.2007 в 20:23)   письмо автору
 
   для: olegat   (30.06.2007 в 13:42)
 

а не легче при показе превью уменьшать размер... да и хранить бинарные данные в БД - особенно мускуле - не особенно рекомендуют... лучше в БД хранить путь к картинке на HDD - меньше проблем.

   
 
 автор: Trianon   (30.06.2007 в 21:40)   письмо автору
 
   для: olegat   (30.06.2007 в 13:42)
 

Вам поможет функция ImageCreateFromString()
Она позволяет загрузить тело файла изображения из переменной.

   
 
 автор: olegat   (01.07.2007 в 14:50)   письмо автору
 
   для: 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$src0000,
    
$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(); тоже не получилось. Подскажите кто знает.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования