Forum Webscript.Ru

Программирование => PHP => Тема начата: pahal от 14 Марта 2007, 20:26:58

Название: Размер картинки
Отправлено: pahal от 14 Марта 2007, 20:26:58
Подскажите, пожалуйста, кто знает, как определить размеры картинки средствами PHP, если картинка взята из базы данных.

Заранее благодарен.
Название: Размер картинки
Отправлено: html_coder от 14 Марта 2007, 23:50:35
Размер в смысле ширина и высота, или размер в смысле размер в байтах?
Название: Размер картинки
Отправлено: pahal от 15 Марта 2007, 16:42:38
Именно ширина и высота в пикселах.
ImageSX и ImageSY почему-то не помогают.
Название: Размер картинки
Отправлено: html_coder от 15 Марта 2007, 17:08:16
Цитировать
pahal:
ImageSX и ImageSY почему-то не помогают.


Что это такое?

А что мешает записывать размеры в таблицу при сохранении изображения, если уже они так нужны. По-моему посмотреть никак не получится, это ведь всего лишь набор байтов.

Как вариант сохранять картинку на диск, вызывать для неё [p]getimagesize[/p], потом удалять картинку.

Но лучше все же писать размеры при сохранении в базу.
Название: Размер картинки
Отправлено: pahal от 15 Марта 2007, 17:37:33
Да, пожалуй, ты прав, спасибо за дельную мысль!
Название: Размер картинки
Отправлено: pahal от 15 Марта 2007, 18:32:40
Вот только превьюшка картинки из базы не получается, если не использовать промежуточные файлы. Напрямую с потоком байтов из базы функция ImageCreateFromJpeg не хочет работать, а предполагалось вообще обойтись без файлов.
Поток байтов из базы не воспринимается библиотекой GD как resource image?
Название: Размер картинки
Отправлено: html_coder от 15 Марта 2007, 19:02:43
А есть смысл хранить изображения в таблице?
Название: Размер картинки
Отправлено: pahal от 15 Марта 2007, 19:06:16
В том-то и дело, что понадобилось хранить в таблице, но не только изображения, а вообще все файлы по проекту, а для картинок нужно делать маленькие превьюшки.
Вот и появилась проблемка создать превьюху из картинки.
С остальными файлами всё нормально.
Название: Размер картинки
Отправлено: html_coder от 15 Марта 2007, 19:11:17
Ну опять же как вариант, создавать preview при загрузке файла и хранить его в таблице.
Название: Размер картинки
Отправлено: pahal от 15 Марта 2007, 20:37:44
Это, конечно, хорошо, вот только превьюха может быть разного размера, при чём в разным местах может выводится по разному, по сему на разные случаи жизни создавать превьюхи и пихать их в таблицу - это уже круто.
Вопрос в том как из потока байтов из базы сделать resource image?
Название: Размер картинки
Отправлено: andymc от 16 Марта 2007, 02:38:40
Цитировать
pahal:
Вопрос в том как из потока байтов из базы сделать resource image?

пожалуй никак
надо было сразу сохранять файлы на диск, а базу писать путь.
Название: Размер картинки
Отправлено: pahal от 16 Марта 2007, 14:17:47
Я ж уже указывал, что нужно все файлы именно в базу писать...
Сохранять их на диске, в базе держать названия и прочее, это всё понятно и просто, тут никаких вопросов нету.
Название: Размер картинки
Отправлено: Egorsha от 16 Марта 2007, 17:34:26
Решал подобную задачу.
Без использования временных файлов - не получится видимо.

Вот кусочек класса (немного подредактированный).



//*****************************************************
//  Изменение масштаба рисунка в зависимости от параметра
//     (используется временный файл)
//***************************************************** function PrintFotoResize($id, $kod)
  {
  $this->pIdPhoto=$id;
 
    $this->GetFoto();
    $tmpfname = tempnam ("/temp", "img");
    $fp = fopen($tmpfname, "w");
    fwrite($fp, $this->pPhoto);
    fclose($fp);
       $im=imagecreatefromjpeg($tmpfname);
       $size=getimagesize($tmpfname);
       $koef1=0.15;
       $koef2=0.25;
    unlink($tmpfname);
    switch($kod)
    {
    case "small": { $new_w=intval($size[0]*$koef1); $new_h=intval($size[1]*$koef1); break; }
    case "medium": { $new_w=intval($size[0]*$koef2); $new_h=intval($size[1]*$koef2); break; }
    case "large": { $new_w=$size[0]; $new_h=$size[1] ;break; }
}
     $im1=imagecreatetruecolor($new_w,$new_h);
     $kd=imagecopyresized($im1,$im,0,0,0,0,$new_w,$new_h,$size[0],$size[1]);

     if($kod==="large")
     {
      $my_www = imagecolorallocate($im1, 0, 0, 0);
      imagefilledrectangle ($im1, $size[0]-145, $size[1]-16, $size[0]-3, $size[1]-3, imagecolorallocate($im1, 255, 255, 255));
      ImageString($im1, 5, $size[0]-140, $size[1]-17, "www.mysite.ru", $my_www);
     }
   if (!headers_sent()) { header("Content-type: image/jpeg"); }
  Imagejpeg($im1);
  ImageDestroy($im1);
}
Название: Размер картинки
Отправлено: pahal от 16 Марта 2007, 17:50:55
Жаль, конечно, но всё же на промежуточных файлах основано.
Всё пытаюсь отойти от файлов, с файлами-то уже давно простое решение имеется, хоть и не с временными, но всё равно с файлами.

Но всё равно спасибо!
Название: Размер картинки
Отправлено: pahal от 16 Марта 2007, 18:33:25
Всё, как обычно решилось простым образом.
Нужно было просто все функции GD изучить и всё.
imagecreatefromstring(), и всё дела.