[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Php & Gd
Bossmen
Привет
помогите нужно сделать вывод изображений
сначала миниатюра а потом большой размер
как здесь http://vkontakte.ru/album-8978_127499238
Или есть уже похожие уроки)
Заранее спасибо



Спустя 5 минут, 32 секунды (31.03.2011 - 12:28) T1grOK написал(а):
А наработки, идеи какие-нибудь есть? С нуля писать думаю никто не захочет, а подсказать другое дело.

Спустя 1 минута, 52 секунды (31.03.2011 - 12:30) Bossmen написал(а):
<?php

$filename = 'images/123.jpg';

$percent = 0.9;

header('Content-type: image/jpeg');

list($width, $height) = getimagesize($filename);

$width = $width / 2;
$height = $height / 2;

$new_width = "170";

$new_height = "128";

$image_p = imagecreatetruecolor(170, 128);

$image = imagecreatefromjpeg($filename);

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagejpeg($image_p, null, 100);

?>

Спустя 33 секунды (31.03.2011 - 12:30) Bossmen написал(а):
она изображения растягивает по всему изображению

Спустя 58 секунд (31.03.2011 - 12:31) fallow написал(а):
учи JavaScript biggrin.gif
А на php такие вещи получаются деревянными, т.к каждый раз придётся обращаться к серверу, а это полная перезагрузка страницы.

Спустя 4 минуты, 4 секунды (31.03.2011 - 12:35) sharki написал(а):
// функция уменьшения изображения превью.
function resizeimg($big, $small, $width, $height,$putch) {


// $putch - путь до загруженного изображения
// $big - название большого изображения
// $small - будущее название маленького изображение, которое будет находится в той же папке где и большое,
// или можно изменить путь вот тут вручную $small = "/min_img/".$small;
// $width, $height ширина и высота превьюшки ( размеры делаются пропорционально не меняя качества)



// имя файла с маштабируемым изображением

$big = $putch.$big;

// имя файла с уменьшенной копией
$small = $putch.$small;

//определиям коэфицент сжатия генерируемого изображения
$ratio = $width/$height;

// получаем размеры исходного изображения
$size_img = getimagesize($big);
list($width_src, $height_src) = getimagesize($big);

// если размеры меньше, то маштабирование не нужно
if(($width_src<$width) && ($height_src<$height)) {
copy($big, $small);
return true;
}

// получаем коэфицент сжатия исходного изображения
$src_ratio = $width_src/$height_src;

// вычисляем размеры уменьшенной копии, чтобы при мащтабировании сохранились пропорции исходного изображения
if ($ratio<$src_ratio) {
$height = $width/$src_ratio;
}
else {
$width = $height*$src_ratio;
}
// создаем пустое изображение п заданным размерам
$dest_img = imagecreatetruecolor($width,$height);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2] == 2) $src_img = imagecreatefromjpeg($big);
else if ($size_img[2] == 1) $src_img = imagecreatefromgif($big);
else if ($size_img[2] == 3) $src_img = imagecreatefrompng($big);

// маштабируем изображение функцией imagecopysapled()
// $dest_img - уменьшенная копия
// $src_img - исходное изображение
// $width - ширина уменьшенной копии
// $height - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $srze_img[1] - высота исходного изображения


imagecopyresampled($dest_img,
$src_img,
0,
0,
0,
0,
$width,
$height,
$width_src,
$height_src);

// сохраняем уменьшенную копию в файл
if ($size_img[2]==2) imagejpeg($dest_img,$small);
else if ($size_img[2]==1) imagegif($dest_img,$small);
else if ($size_img[2]==3) imagepng($dest_img,$small);
// очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}

Спустя 7 минут, 27 секунд (31.03.2011 - 12:43) Bossmen написал(а):
sharki
http://vkontakte.ru/album-8891200_101495135 она будет также работать?

Спустя 2 минуты, 1 секунда (31.03.2011 - 12:45) sharki написал(а):
Bossmen
Эта функция ресайзит пропорциональные изображения, а там дальше что хош с ними делай, по идее тебе надо будет закачать изображение, перудать этой функции, она отресайзит, получить все имена и занести их в БД, а потом оттуда уже выводить циклом и в таблицу или дивами.

Спустя 7 минут, 15 секунд (31.03.2011 - 12:52) Bossmen написал(а):
так мне нужно чтобы одно изображение было
а по get параметрам изменяется размер если get1024 то изображения 1024х768

Спустя 7 минут, 18 секунд (31.03.2011 - 13:00) sharki написал(а):
Ну а в чем проблема? передавай GET'ом в файл обработчик он передает те самые ширину и высоту и эта функции ресайзит и выдает тебе изображение.

надо будет только сделать чуть по другому, вот это
 // сохраняем уменьшенную копию в файл
if ($size_img[2]==2) imagejpeg($dest_img,$small);
else if ($size_img[2]==1) imagegif($dest_img,$small);
else if ($size_img[2]==3) imagepng($dest_img,$small);
// очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;


Заменить на

// Создаем картинку
if ($size_img[2]==2) {
imagejpeg($dest_img);
header("Content-Type: image/jpeg");
}
else if ($size_img[2]==1) {
imagegif($dest_img);
header("Content-Type: image/gif");
}
else if ($size_img[2]==3) {
imagepng($dest_img);
header("Content-Type: image/png");
}
// очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);


Т.е этот файл и будет картинкой и использовать надо будет так

<img src ="image.php?w=1024&h=768" />



Ну а как передать GET параметры надеюсь разберешься

Спустя 16 минут, 27 секунд (31.03.2011 - 13:16) Bossmen написал(а):
Warning: imagejpeg() expects parameter 1 to be resource, null given in Z:\home\bodyofproof\www\123.php on line 44

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\bodyofproof\www\123.php:44) in Z:\home\bodyofproof\www\123.php on line 45

Warning: imagedestroy() expects parameter 1 to be resource, null given in Z:\home\bodyofproof\www\123.php on line 49

Warning: imagedestroy() expects parameter 1 to be resource, null given in Z:\home\bodyofproof\www\123.php on line 50

Ошибки выдает

Спустя 56 секунд (31.03.2011 - 13:17) sharki написал(а):
Bossmen
А ты все параметры передал?в функцию? и правильно ли пути указал?

Спустя 1 минута, 5 секунд (31.03.2011 - 13:18) Bossmen написал(а):
вот мой скрипт

<?php
// функция уменьшения изображения превью.
function resizeimg($big, $small, $width, $height,$putch) {


// $putch - путь до загруженного изображения
// $big - название большого изображения
// $small - будущее название маленького изображение, которое будет находится в той же папке где и большое,
// или можно изменить путь вот тут вручную $small = "/min_img/".$small;
// $width, $height ширина и высота превьюшки ( размеры делаются пропорционально не меняя качества)



// имя файла с маштабируемым изображением

$big = $putch.$big;

// имя файла с уменьшенной копией
$small = $putch.$small;

//определиям коэфицент сжатия генерируемого изображения
$ratio = $width/$height;

// получаем размеры исходного изображения
$size_img = getimagesize($big);
list($width_src, $height_src) = getimagesize($big);

// если размеры меньше, то маштабирование не нужно
if(($width_src<$width) && ($height_src<$height)) {
copy($big, $small);
return true;
}

// получаем коэфицент сжатия исходного изображения
$src_ratio = $width_src/$height_src;

// вычисляем размеры уменьшенной копии, чтобы при мащтабировании сохранились пропорции исходного изображения
if ($ratio<$src_ratio) {
$height = $width/$src_ratio;
}
else {
$width = $height*$src_ratio;
}
if ($size_img[2]==2) {
imagejpeg($dest_img);
header("Content-Type: image/jpeg");
}

// очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
}
$big= "images/123.jpg";
$width ="120";
$height ="120";
resizeimg($big, $small, $width, $height,$putch)
?>

Спустя 6 минут, 1 секунда (31.03.2011 - 13:24) sharki написал(а):
эм, ты сам то понял что сделал?
Зачем ты вырезал кусок кода? и т.д и т.п
imagecopyresampled($dest_img,
$src_img,
0,
0,
0,
0,
$width,
$height,
$width_src,
$height_src);



Еще раз и по порядку, сначало попробуй сделать всё по дефоулту, берешь мой скрипт, подставляешь ВСЕ значения, и смотришь что получилось, потом заменяешь кусок скрипта на другой, где с header....... в конце, и передаешь ВСЕ параметры все 5 ! смотришь что получилось, если удовлетворяет и всё сделано правильно, будем убирать лишнее.

Спустя 17 минут, 42 секунды (31.03.2011 - 13:42) Bossmen написал(а):
Отдуши помог))
То с это тех механикой на учебе, мозги сегодня не варят)))
Большое спасибо!!!!

Спустя 34 минуты, 20 секунд (31.03.2011 - 14:16) sharki написал(а):
Пожалуйста)

Спустя 50 минут, 49 секунд (31.03.2011 - 15:07) Bossmen написал(а):
А как в цикле сделать?

Спустя 5 минут, 20 секунд (31.03.2011 - 15:12) sharki написал(а):
Что в цикле? поподробнее

Спустя 1 минута, 8 секунд (31.03.2011 - 15:13) Bossmen написал(а):
я из базы фотки беру
и их нужно в цикл
я функцию в цикл запехнул не пашет

Спустя 2 минуты, 9 секунд (31.03.2011 - 15:15) sharki написал(а):
покажи что ты сделал =) исправим

Спустя 8 минут, 38 секунд (31.03.2011 - 15:24) Bossmen написал(а):
<?php

include './settings/db.php';

ob_start();
function resizeimg($big) {
$putch = "./images/";
$width ="120";
$height ="120";

// $putch - путь до загруженного изображения
// $big - название большого изображения
// $small - будущее название маленького изображение, которое будет находится в той же папке где и большое,
// или можно изменить путь вот тут вручную $small = "/min_img/".$small;
// $width, $height ширина и высота превьюшки ( размеры делаются пропорционально не меняя качества)



// имя файла с маштабируемым изображением

$big = $putch.$big;

// имя файла с уменьшенной копией
$small = $putch.$small;

//определиям коэфицент сжатия генерируемого изображения
$ratio = $width/$height;

// получаем размеры исходного изображения
$size_img = getimagesize($big);
list($width_src, $height_src) = getimagesize($big);

// если размеры меньше, то маштабирование не нужно
if(($width_src<$width) && ($height_src<$height)) {
copy($big, $small);
return true;
}

// получаем коэфицент сжатия исходного изображения
$src_ratio = $width_src/$height_src;

// вычисляем размеры уменьшенной копии, чтобы при мащтабировании сохранились пропорции исходного изображения
if ($ratio<$src_ratio) {
$height = $width/$src_ratio;
}
else {
$width = $height*$src_ratio;
}
// создаем пустое изображение п заданным размерам
$dest_img = imagecreatetruecolor($width,$height);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2] == 2) $src_img = imagecreatefromjpeg($big);
else if ($size_img[2] == 1) $src_img = imagecreatefromgif($big);
else if ($size_img[2] == 3) $src_img = imagecreatefrompng($big);

// маштабируем изображение функцией imagecopysapled()
// $dest_img - уменьшенная копия
// $src_img - исходное изображение
// $width - ширина уменьшенной копии
// $height - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $srze_img[1] - высота исходного изображения


imagecopyresampled($dest_img,
$src_img,
0,
0,
0,
0,
$width,
$height,
$width_src,
$height_src);

if ($size_img[2]==2) {
imagejpeg($dest_img);
header("Content-Type: image/jpeg");
}
else if ($size_img[2]==1) {
imagegif($dest_img);
header("Content-Type: image/gif");
}
else if ($size_img[2]==3) {
imagepng($dest_img);
header("Content-Type: image/png");
}



// очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
}





$query = "SELECT * FROM tabl_picture ORDER BY id_picture DESC";


$result = mysql_query($query);


while($myrow = mysql_fetch_assoc($result)){

resizeimg($myrow['image']);

}

Спустя 20 минут, 49 секунд (31.03.2011 - 15:45) sharki написал(а):
Ну правильно, по идее он тебе должен выдать только одно изображение, последнее.

Вот смотри ты resizeimg($myrow['image']); много раз проходишь по этой функцией, а ведь она щас у тебя разовая, приняла изображение -> отдала в виде изображения 1 раз в этом же файле, ты опять её вызываешь она забыла про предыдущею и создала еще одно и т.д...

В твоем случае нужно создать превьюшки(т.е именно создать и сохранить в бд и в папку mini_jpg, а большие в big_jpg) например на по 150px и вывести их все на одной странице, потом пользователь щелкает на фотку с ссылкой и get параметрами, открывает файл обработчик где он всё это принял. а динамически у тебя так не получится их выводить... хотя щас кто нить и придумает, может быть

Спустя 6 минут, 12 секунд (31.03.2011 - 15:51) sharki написал(а):
А так, ты на главной странице где всё этот ы предоставляешь делаешь
$query = "SELECT *  FROM tabl_picture ORDER BY id_picture DESC";


$result = mysql_query($query);

echo '<div style="width: 1000px; heigth: 1000px">';
while($myrow = mysql_fetch_assoc($result)){

echo '<div style="float:left; width: 150px; heigth: 150px;"><a href="bla.php?w=234&h=55&id=3"> <img src ="' . $myrow['min_image'] . '"></a></div>';

}
echo '</div>';

Спустя 10 минут, 14 секунд (31.03.2011 - 16:01) Bossmen написал(а):
Вот так пробую
<?php

include './settings/db.php';

ob_start();
function resizeimg() {
$putch = "./images/";
$width ="120";
$height ="120";


$query = "SELECT * FROM tabl_picture ORDER BY id_picture DESC";
$result = mysql_query($query);


while($myrow = mysql_fetch_assoc($result)){

$im[] = $myrow;

}

$count = count($im);
// $putch - путь до загруженного изображения
// $big - название большого изображения
// $small - будущее название маленького изображение, которое будет находится в той же папке где и большое,
// или можно изменить путь вот тут вручную $small = "/min_img/".$small;
// $width, $height ширина и высота превьюшки ( размеры делаются пропорционально не меняя качества)


for ($x=0;$x<$count;$x++):

// имя файла с маштабируемым изображением
$big = $putch.$im[$x]['image'];



//определиям коэфицент сжатия генерируемого изображения
$ratio = $width/$height;

// получаем размеры исходного изображения
$size_img = getimagesize($big);
list($width_src, $height_src) = getimagesize($big);

// если размеры меньше, то маштабирование не нужно
if(($width_src<$width) && ($height_src<$height)) {
copy($big, $small);
return true;
}

// получаем коэфицент сжатия исходного изображения
$src_ratio = $width_src/$height_src;

// вычисляем размеры уменьшенной копии, чтобы при мащтабировании сохранились пропорции исходного изображения
if ($ratio<$src_ratio) {
$height = $width/$src_ratio;
}
else {
$width = $height*$src_ratio;
}
// создаем пустое изображение п заданным размерам
$dest_img = imagecreatetruecolor($width,$height);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2] == 2) $src_img = imagecreatefromjpeg($big);
else if ($size_img[2] == 1) $src_img = imagecreatefromgif($big);
else if ($size_img[2] == 3) $src_img = imagecreatefrompng($big);

// маштабируем изображение функцией imagecopysapled()
// $dest_img - уменьшенная копия
// $src_img - исходное изображение
// $width - ширина уменьшенной копии
// $height - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $srze_img[1] - высота исходного изображения


imagecopyresampled($dest_img,
$src_img,
0,
0,
0,
0,
$width,
$height,
$width_src,
$height_src);

if ($size_img[2]==2) {
imagejpeg($dest_img);
header("Content-Type: image/jpeg");
}

endfor;
}


resizeimg();

Спустя 9 минут, 33 секунды (31.03.2011 - 16:11) sharki написал(а):
Bossmen
Зачем тебе это? он у тебя будет выполняться наверное долго. Возьми мой самый первый скрипт где он сохраняет превьюшки в папку и там же добавляй названия будущих превьюшек в БД и оригиналы, а потом ты тупо их выводишь циклом из БД подхватывая изображения из папок, передавая в ссылки id большого изображения, чтобы потом один раз его вызвать и отресайзить пользователю.

Спустя 4 минуты, 28 секунд (31.03.2011 - 16:15) Bossmen написал(а):
А как сделать загрузку на севр. изображений?
а ты думаешь в вк тоже все мини изображения хроняться отдельно?

Спустя 55 секунд (31.03.2011 - 16:16) sharki написал(а):
Конечно

А ты возьми мой первоначальный скрипт, подставь все значения и глянь куда он сохранит и как это выглядит

Спустя 2 минуты, 35 секунд (31.03.2011 - 16:19) Bossmen написал(а):
Наверно так и сделаю))
надо будет создать две папки мини и большие изображения ?

Спустя 1 минута, 19 секунд (31.03.2011 - 16:20) Bossmen написал(а):
а как все граммотно сделать добавку в базу?

Спустя 47 секунд (31.03.2011 - 16:21) sharki написал(а):
да, и лучше чтобы названия были одинаковые, что у большого, что и у маленького, так ты просто где надо подставляешь название папки и и он выводит нужное тебе изображение.


UPDATE

А ты сначала сделай так, чтобы ты контролировал названия превьюшек, и их месторасположение, а потом уже будешь добавлять их названия в БД, в итоге в БД у тебя одно поле img, где лежит название обоих изображений, только раскиданных по разным папкам.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.