Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Избранное > Технология


Автор: alligator 14.9.2005, 14:30
Задача всем известная и не однократно обсуждалась , у меня такой вопрос
допустим я закидываю фотки в папку с большим разрешением и задача сгенрить страничку на которую выведуться картинки маленькго размера а при нажатии на них они увеличивались в общем всё =)
Обьясните пожалуйсте технологию

Автор: z-END 14.9.2005, 14:37
юзаем до дырок поиск "изменение размеров изображения", там все подробно описано как уменьшить... делаем из этого скрипт my_img_generator.php который в зависимости от параметра showimage выдает нужную картинку в уменьшеном размере если type=preview или в полный размер если указано type=view
на странице где показываются превьюхи типа того:
Код

<a href="my_img_gengerator.php?showpicture=1&type=view">
  <img src="my_img_gengerator.php?showpicture=1&type=preview">
</a> 

Автор: alligator 14.9.2005, 14:38
тоесть просто он получаеться генерит новую картинку ?
Добавлено @ 14:43
сорри что не заюзал поиск просто меня интересовал не сам скрипт а именно технология....
и еще один вопрос где лучше хранить картинки в мускуле или в папке?
если в мускуле то как их туда затолкать? и соответсвенно вынимать)
Или может просто в мускуле линки хранить ?

Автор: z-END 14.9.2005, 14:44
alligator именно такsmile вместо html кода он выдает image/jpeg или png данныеsmile
Добавлено @ 14:45
Цитата(alligator @ 14.9.2005, 15:38)
где лучше хранить картинки в мускуле или в папке?

незнаю... я никогда в мускуле не хранил... всегда в папке, продумай структуру папок/имен файлов.

Автор: alligator 14.9.2005, 14:48
так ясно значит папок будет вполне достаточно, тогда последний вопрос
что лучше imagecopyresized или imagecopyresamled

Автор: z-END 14.9.2005, 14:53
imagecopyresized - быстрее но менее качественно
imagecopyresamled - меделенней но намного качественней,
да вот еще тут полазил вычитал, (что действительно правильней) при создании уменьшеной картинки сохранять ее на диск, и при последующем запросе просто открывать ее, а не уменьшать заново.

Автор: alligator 14.9.2005, 14:57
Ну конечно это уменьшит нагрузку на сервер...

Автор: alligator 14.9.2005, 15:49
А как мне допустим наложит текст на фотку чтобы она не испортилась ?
в правый нижний угол ?

Автор: z-END 14.9.2005, 15:52
ПОИСК!!!

Автор: alligator 14.9.2005, 15:57
ок ясн =)

Автор: Mal Hack 14.9.2005, 17:48
Цитата(alligator @ 14.9.2005, 15:38)
тоесть просто он получаеться генерит новую картинку ?


Цитата(z @ 14.9.2005, 15:44)
alligator именно такsmile

А про нагрузку на сервер вы подумали? smile

Всегда превью соз-даются при загрузке картинки, но никак не тем способом, который вы описали. Это сильно грузит сервер.

Автор: z-END 14.9.2005, 17:55
Цитата(Mal @ 14.9.2005, 18:48)
А про нагрузку на сервер вы подумали?


Цитата(z @ 14.9.2005, 15:53)
да вот еще тут полазил вычитал, (что действительно правильней) при создании уменьшеной картинки сохранять ее на диск, и при последующем запросе просто открывать ее, а не уменьшать заново.


Автор: Mal Hack 14.9.2005, 17:58
z-END извиняюсь, не внимательно прочитал.

В любом случае хочу уточнить, что превьюшку надо делать при ЗАГРУЗКЕ основной картинки.

Автор: z-END 14.9.2005, 18:14
Mal Hack всмысле в момент закачки картинки на сервер сразу генерить превьюху? тоже вариантsmile)

Автор: Mal Hack 14.9.2005, 18:17
z-END я так понял ты хотел генерить превьюху при обращении к ней, тобишь:

Цитата(z @ 14.9.2005, 15:37)
полный размер если указано type=view
на странице где показываются превьюхи типа того:

Это не есть гуд smile

Автор: z-END 14.9.2005, 18:25
Mal Hack ну изначально мысли были такие, потом полазил и предложил
Цитата(z @ 14.9.2005, 15:53)
сохранять ее на диск, и при последующем запросе просто открывать ее, а не уменьшать заново.

хотя сейчас вообще думаю что самый оптимальный вариант ( если функционал загрузки картинок это предусматривает) делать превьюху в момент загрузки файла на хост.

Автор: alligator 14.9.2005, 18:33
так подождите дык как делать генерить во время загрузки или же сохранять?
я кстати так и не понял как сохранять =(( сорри

Автор: Mal Hack 14.9.2005, 19:13
Цитата(alligator @ 14.9.2005, 19:33)
так подождите дык как делать генерить во время загрузки или же сохранять?
я кстати так и не понял как сохранять =(( сорри

Генерируешь превьюху на сервере и сохраняешь ее в тот момент, когда загружается основная картинка.

Автор: alligator 14.9.2005, 19:14
вот как ей сохранить вот код:
Код

<?
header('Content-type: image/jpeg');
$nsc = new rez();
$nsc->name_big = '2.jpg';
$nsc->pic($nsc->name_big);

class rez{
    var $name_big;
function pic($name_big){
list($width, $height) = getimagesize($this->name_big);
      $s_im=imagecreatefromjpeg($this->name_big);
      $d_im=imagecreatetruecolor(120, 100);
      imagecopyresampled($d_im, $s_im, 0, 0, 0, 0, 120, 100, $width, $height);
      imagejpeg($d_im);
      ImageDestroy($d_im);
}
}
?>

Добавлено @ 19:18
я просто доку почитал что то вообще не догнал =((

Автор: Mal Hack 14.9.2005, 19:23
Цитата
bool imagejpeg ( resource image [, string filename [, int quality]] )

Автор: alligator 14.9.2005, 19:45
Не хочет создаваться =((
Код

<?
header('Content-type: image/jpeg');
$nsc = new rez();
$nsc->name_big = '2.jpg';
$nsc->pic($nsc->name_big);

class rez{
    var $name_big;
function pic($name_big){
list($width, $height) = getimagesize($this->name_big);
      $s_im=imagecreatefromjpeg($this->name_big);
      $d_im=imagecreatetruecolor(120, 100);
      imagecopyresampled($d_im, $s_im, 0, 0, 0, 0, 120, 100, $width, $height);
      imagejpeg($d_im,'2_small.jpg','100');
      ImageDestroy($d_im);
}
}
?>

Автор: Mal Hack 14.9.2005, 19:52
А чем пишет?
да, 3 параметр - качество, указывается числом, а не строкой.

Автор: alligator 14.9.2005, 19:58
Ничего не пишет =(

Автор: Mal Hack 14.9.2005, 20:00
Вывод ошибок всех стоит?

Автор: alligator 14.9.2005, 20:02
стоит
error_reporting(E_ALL ^ E_NOTICE);
Добавлено @ 20:11
А вот что пишет
Wrong parameter count for imagedestroy()

Автор: alligator 14.9.2005, 20:30
Не хочет =*(

Автор: Рыжий 14.9.2005, 20:46
alligator
может быть это чем то поможет:
http://php.com.ua/ru/articles/bicycles/.htm
PS не реклама!

Автор: alligator 14.9.2005, 20:48
Так теперь создаёт но не выводит =((
Добавлено @ 20:53
Код

<?

$nsc = new rez();
$nsc->name_big = '2.jpg';
$nsc->pic($nsc->name_big);

class rez{
    var $name_big;
function pic($name_big){
list($width, $height) = getimagesize($this->name_big);
header('Content-type: image/jpeg');
      $s_im=imagecreatefromjpeg($this->name_big);
      $d_im=imagecreatetruecolor(120, 100);
      imagecopyresampled($d_im, $s_im, 0, 0, 0, 0, 120, 100, $width, $height);
      imagejpeg($d_im,'2_small.jpg',100);
      ImageDestroy($d_im);
      ImageDestroy($s_im);
}
}
?>

Добавлено @ 20:58
и права на файл выставились 660 скачивать даже не даёт и выставить
Причем нет доступа именно к созданой картинке!

Автор: Mal Hack 14.9.2005, 21:11
Да.. Хостер видать "зашибенный", что у него скрипт черт знает под кем работают...

chmod( 0644 ); для файла после разрушения картинки что выдает?

Автор: alligator 14.9.2005, 21:18
залил на другой хостинг там 644 создаёт
http://vipartconcert.ru/php/rr/r.php
тоже самое
Добавлено @ 21:22
Скачаный файл нормально открываеться , а скриптом фиг =((

Автор: alligator 14.9.2005, 22:43
дык что делать то ?

Автор: Mal Hack 14.9.2005, 22:46
Попробуй до imagejpg сделать touch и для него chmod для нужного имени файла.

Автор: alligator 14.9.2005, 22:50
Да нет все нормально уже файлик создаёться с нормальными правами и к нему есть доступ , но скрипт его не выводит говорит что есть ошибки
Добавлено @ 22:51
Я уже залил на свой хостинг
http://netz.msk.ru/r.php

Автор: PARROT 14.9.2005, 22:53
Цитата(alligator @ 14.9.2005, 23:43)
дык что делать то ?

Больше не мучаться:
Код

<?php

function image_chop($file) {
    
    $path_real=$file;
    $src_img=ImageCreateFromJpeg("$path_real");
    
    $src_width=ImagesX($src_img);
    $src_height=ImagesY($src_img);
    
    $dest_width="100";
    $quality="80";
    
    $dest_height=($dest_width/$src_width) * $src_height;
    
    $dest_img=ImageCreateTrueColor($dest_width, $dest_height);
    ImageCopyResampled($dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);
    
    ImageJpeg($dest_img, $file, $quality);
    ImageDestroy($dest_img);

}

if(isset($_FILES['image'])) {
    
    $md5        = md5(microtime());
    $bigimg        = "/home/file/www/data/{$md5}_b.jpg";
    $smimg        = "/home/file/www/data/{$md5}_s.jpg";

    move_uploaded_file($_FILES['image']['tmp_name'], $bigimg);
    copy($bigimg, $smimg);
    
    image_chop($smimg);

}
 echo "<img src='data/${md5}_s.jpg'>";

?>

Автор: alligator 14.9.2005, 22:55
Я хочу свой сделать =(( так то у меня много образцов
Добавлено @ 22:56
Вроде на вид нет ошибок
Код

<?
$nsc = new rez();
$nsc->name_big = './2.jpg';
$nsc->pic($nsc->name_big);

class rez{
    var $name_big;
function pic($name_big){
list($width, $height) = getimagesize($this->name_big);

      $s_im=imagecreatefromjpeg($this->name_big);
      $d_im=imagecreatetruecolor(120, 100);
      imagecopyresampled($d_im, $s_im, 0, 0, 0, 0, 120, 100, $width, $height);
      header('Content-type: image/jpeg');
      imagejpeg($d_im,'./2small.jpg',100);
      ImageDestroy($s_im);
      ImageDestroy($d_im);
}
}
?>

Автор: alligator 15.9.2005, 00:08
Текс паходу как я понимаю imagejpeg данные выводит либо в браузер либо в файл так ведь ?
тогда получаеться что функция работает
Добавлено @ 00:08
и она не должна выводить данные а просто должна создавать картинку..... уменьшенную..

Автор: Mal Hack 15.9.2005, 13:00
Цитата(alligator @ 15.9.2005, 01:08)
и она не должна выводить данные а просто должна создавать картинку..... уменьшенную..

Ага.

Автор: alligator 15.9.2005, 16:18
Блин а я себе весь мозг извёл =(

Автор: alligator 16.9.2005, 19:14
Извиняюсь за тупость я что то не пойму как мне правильно подгружать скрипт чтобы все фотки ресайзил и генерил страничку,
листинг фоток получаю через glob()
текстовый дизайн я набросал , а вот как подгружать что то непонятно фотки

Автор: Mal Hack 16.9.2005, 19:58
Цитата(alligator @ 16.9.2005, 20:14)
Извиняюсь за тупость я что то не пойму как мне правильно подгружать скрипт чтобы все фотки ресайзил и генерил страничку,
листинг фоток получаю через glob()
текстовый дизайн я набросал , а вот как подгружать что то непонятно фотки

Когда подгружать? В админке или в пользовательской части?

Автор: alligator 16.9.2005, 20:02
пока что нет ни админки не пользовательской части =)
допустим что просто в пользовательской части..
а просто хотел по фтп заливать пока не напишу пользовательский интерфейс, хотя вроде ты немножко не понял
Я непонял как мне сделать вывод фоток большой и маленькой , хранить id фоток в базе или как блин не знаю как обьяснить даже =(((

Автор: Mal Hack 16.9.2005, 20:13
Ты загружаешь фотку на сервер. Потом в админке или отдеьльно (НО НЕ в пользовательской части) запускаешь скрипт, который генерирует превью.
При выводе для пользователя ты к примеру выводишь картинки 2.JPG для больших и 2_small.JPG для превью.
В БД хранишь ID ну и имя файла картинки и категории, если это надо.

Автор: alligator 16.9.2005, 20:16
кароче как я понял админку палюбому писать надо будет =) ок спасибо

Автор: supercelt 16.9.2005, 21:21
www.webarrows.ru - уменьшает автоматом, и ещё на мыло рассылает при подписке

Автор: Elfet 27.1.2006, 12:43
class_image.php - класс для работы с картинками от IPB smile Им только и пользуюсь smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)