Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: как уменьшить размер изображения при загрузки?
Форумы портала PHP.SU » PHP » Программирование на PHP » как уменьшить размер изображения при загрузки?

Страниц (2): [1] 2 »
 

1. Tormoz - 04 Ноября, 2009 - 16:41:15 - перейти к сообщению
помогите пожалуйста, как уменьшить размер изображения при загрузки, заранее спасибо!
2. Roler - 04 Ноября, 2009 - 16:51:48 - перейти к сообщению
А поиском вы не пользуетесь принципиально?
4. Tormoz - 04 Ноября, 2009 - 16:54:51 - перейти к сообщению
я тему еле нашел где создать блин
куда мне до поиска
5. EuGen - 04 Ноября, 2009 - 17:14:15 - перейти к сообщению
Это не есть предмет гордости. Полюбопытствуйте в следующий раз, Вам же потом легче будет.
6. Tormoz - 04 Ноября, 2009 - 17:18:01 - перейти к сообщению
хорошо! спасибо за ссылку!
7. JustUserR - 05 Ноября, 2009 - 09:44:42 - перейти к сообщению
Tormoz Вы имеете в виду сжатие изображение в размерах с ухудшением качества или же типа Gzip-сжатие - это совершенно разные вещи
Могу дать готовую функцию которая уменьшает изображение
8. Tormoz - 05 Ноября, 2009 - 12:20:06 - перейти к сообщению
Я короче пишу блог, мне нужно что бы когда человек загружает фото, оно весело мерьше, так как если она будет весить 2-3 мб страницы грузится будут по пол дня!
9. valenok - 05 Ноября, 2009 - 12:36:41 - перейти к сообщению
А вы весело уменьшайте картинку и конвертируйте в jpg
Еще можете загружать все это на сторонний хостинг изображений. Они обычно оперативней реагируют на запросы.
10. Tormoz - 05 Ноября, 2009 - 13:55:55 - перейти к сообщению
Может кто может готовый код дать, вот мой код загрузни изображения:
<?

if (!isset($_FILES['att']))
{

echo <<<HERE
<p><form enctype='multipart/form-data' method=post>
<input type="file" size="50" name="att" class=input><br>
<input class=button type=submit value='Загрузить'>
</form></p>
HERE;
}
else
{


$filename = $_FILES['att']['name'];
$ex = explode(".",$filename);

if (substr($_FILES['att']['type'],0,5) == 'image')
{


if (copy($_FILES['att']['tmp_name'],
"files/".$_SESSION['user'].".".$ex[1]))
{
// Уничтожаем файл во временном каталоге
unlink($_FILES['att']['tmp_name']);
// Изменяем права доступа к файлу
chmod("files/".$_SESSION['user'].".".$ex[1], 0644);
}

$ava = $_SESSION['user'].".".$ex[1];

$result=mysql_query("UPDATE userlist SET ava='$ava' WHERE id='".$_SESSION['id_user']."'");


if ($result)
{
echo "<p>Фото загружено!!!";
}

}
else { echo "<p>Данный формат не является графическим!!!<br><a href='update.php'>Повторить</a>"; exit(); }
}
}
?>

если кто может переделайте, заранее спасибо!!
11. JustUserR - 05 Ноября, 2009 - 16:28:07 - перейти к сообщению
Tormoz Понимаете есть вещи которые нельзя сделать с помощью некотрых заданных средств в принципе
Вам надо смижать фотографию на стороне клиента причем делать это браузером то есть JS - в чистом виде это невозможно - максимум что можно придумать это прицепить ActiveX-элемент который будет сжимать изображение
Единсвенно чем можно вас порадовать что в роли такого элемента подойдет flash-ка и вроде бы там можно реализовать такое
12. Tormoz - 05 Ноября, 2009 - 16:58:15 - перейти к сообщению
Ура! получилось!
вот код:

<?

if (!isset($_FILES['att']))
{
echo "<p>Максимальный размер файла не должен привышать 500 кб!</p>";
echo <<<HERE
<p><form enctype='multipart/form-data' method=post>
<input type="file" size="50" name="att" class=input><br>
<input class=button type=submit value='Загрузить'>
</form></p>
HERE;
}
else
{


$src = $_FILES['att']['name'];
$ex = explode(".",$src);





if (substr($_FILES['att']['type'],0,5) == 'image')
{



if (copy($_FILES['att']['tmp_name'],
"files/".$_SESSION['user'].".".$ex[1]))
{
// Уничтожаем файл во временном каталоге
unlink($_FILES['att']['tmp_name']);
// Изменяем права доступа к файлу
chmod("files/".$_SESSION['user'].".".$ex[1], 0644);
}

$ava = $_SESSION['user'].".".$ex[1];

$result=mysql_query("UPDATE userlist SET ava='$ava' WHERE id='".$_SESSION['id_user']."'");


if ($result)
{
echo "<p>Фото загружено!!!";



$dest = $_SESSION['user'].".".$ex[1];




function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

if ($size === false) return false;

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;

$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];

$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);

$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);

imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);

imagejpeg($idest, $dest, $quality);

imagedestroy($isrc);
imagedestroy($idest);

return true;

}




if (img_resize('files/'.$_SESSION['user'].'.'.$ex[1].'', 'files/'.$_SESSION['user'].'.'.$ex[1].'', 500, 600))
echo 'Image resized OK';
else
echo 'Resize failed!';













}

}
else { echo "<p>Данный формат не является графическим!!!<br><a href='update.php'>Повторить</a>"; exit(); }
}


?>
кто может сделать что бы сжималось пропорцианально?
вот кад пропорциональности:

list($width, $height, $type, $attr) = getimagesize($img);
if($width > $height) $dif = $width / 100; $width = 100; $height = $height / $dif;
else $dif = $height / 100; $height = 100; $width = $width / $dif;
echo "< img src='".$img."' width = '".$width."' height='".$height."' />";

ток я незнаю как его применить! помогите пожалуйста...
13. JustUserR - 06 Ноября, 2009 - 09:06:02 - перейти к сообщению
Tormoz Эээ ну картинка все равно сжимается на сервере и закачивать ее будет также долго - вы это учли?
14. Mike-Eci - 07 Ноября, 2009 - 08:31:33 - перейти к сообщению
всем здрасте, многоуважаемые проггеры. я не стал новую тему создавать, хоть эта и не совсем подходит. я что то не соображу как сделать следующее:

человек заполняет форму и у него должна быть возможность добавить несколько картинок, допустим три. я знаю что в форме можно сделать три поля типа "прикрепляемый файл" но если вдруг несведущий человек добавляет 3 фотки размером по 2.5 метра, то скрипту нужно выделять больше памяти.

можно ли сделать так что бы человек ткнув на надпись "добавить картинку" попадал на страничку где уже нужно было ткнуть на кнопку обзор поля
CODE (text):
скопировать код в буфер обмена
  1. <input class="input" type="file" size="30" name="FILE_UPLOAD">
- дальше скрипт загружает, уменьшает, сохраняет файл а в страничку с главной формой возвращает какой нибудь ее идентификатор?

извиняюсь сразу за так коряво поставленный вопрос. возможно есть какие то еще способы я просто не представляю еще.
вот как примерно здесь: http://www[dot]terdo[dot]ru/post/ . я понимаю что это сделано частично на яве.
15. sawkow - 08 Ноября, 2009 - 22:18:03 - перейти к сообщению
всем привет. Код, представленный выше работает с фотографиями до определённого размера. С некоторого размера (из современных фотокамер) РНР давиться. Т.е. скрипт перестаёт работать.
Пожалуйста подскажите, какими средствами можно решить задачу?
Идеально будет если посетитель сайта выберет любую jpeg фотку с своего компьютера и нажмёт "отправить". Не напрягать пользователя размером, разрешением и т.д.
Может можно какую-то внешнюю програмку приспособить, или ресурс какой? Излазился по инету в поисках. Всё что есть это использование DB.

 

Powered by ExBB FM 1.0 RC1