[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка фото на сервер
Kruger
Делаю у себя на сайте раздел анкет, нужно сделать пункт загрузки своего фото...
также сделать ограничение по размеру и расширению...
как это реализовать?
заранее благодарен за любой совет.



Спустя 31 минута, 56 секунд (6.11.2008 - 16:58) Sylex написал(а):
Код

$name = 'myfoto'; // имя в форме
$img_path = '/var/www/server/blablabla/upload_image/'; // путь для загрузки, ну тут берешь из своего движка переменную типа

if ( $_FILES[$name] )
if ( is_uploaded_file($_FILES[$name]['tmp_name']) )
{
$upl_file = $_FILES[$name]; // файл для загрузки

// новое случайное имя

$imgname = "";
for ($k=1;$k<=32;$k++)
if ( rand(0, 5)==3 ) $imgname .= chr(48+rand(0, 9)); else $imgname .= chr(65+rand(0, 25));
$imgname = strtolower($imgname);
$imgname .= ".jpg";

// проверка типа файла на JPEG
if ($upl_file['type'] != "image/jpeg" && $upl_file['type'] != "image/pjpeg") {
die('error type file');
}

$full_path = $img_path . $imgname; // полный путь
if ( file_exists($full_path) ) unlink ($full_path); // если файл существует - удаляем

if ( move_uploaded_file($upl_file['tmp_name'], $full_path) ) // перемещение
{
// определяем размеры изображения
$info_size = getimagesize($full_path);
$width = $info_size[0]; // ширина
$height = $info_size[1]; // высота
}

}


ну а дальше проверки, или авто-изменение размеров...

Спустя 2 дня, 7 часов, 8 минут, 24 секунды (9.11.2008 - 00:07) cloozis написал(а):
+1 , тоже занимаюсь этим

чтоб залить картинку - нужно
1) создать папку где будут раниться изображения.
2) создать поле в таблице пользователя (logo)

функция:

function logo($id, $userfile) {

global $link;

$uploaddir = '/yourhost/www/img/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir .
$_FILES['userfile']['name'])) {
$test = $_FILES['userfile']['name'];
$query=("UPDATE users SET logo='$test' WHERE id='$id'");
$result=mysql_query($query, $link) or die("Died inserting login info into db. Error returned if any: ".mysql_error());
$returnUrl = ("profile.php?id=$id");
header('Location:'.$returnUrl);


} else {

}

return true;
}


отображаем рисунок -

<img src="img/<? echo $myrow[logo] ?>" alt="Логотип" width="191" height="191" />

--------------------------------
все работает, только как зделать так чтоб масштаб уменьшить и убрать width="191" height="191" .... может кто поможет


авто-изменение размеров подскажите?

Спустя 2 часа, 13 минут, 16 секунд (9.11.2008 - 02:20) Engie написал(а):
Т.к. мое текущее изменение размера создано исключительно для комерческих целей, вот самая простая версия уменьшения изображений:

<?php
# Constants
$IMAGE_BASE = 'images/';
$MAX_WIDTH = 200; // максимальная ширина
$MAX_HEIGHT = 200; // максимальная высота

# Get image location

$image_file = str_replace('..', '', $_SERVER['QUERY_STRING']);
$image_path = $IMAGE_BASE . "/$image_file";

# Load image
$img = null;
$ext = strtolower(end(explode('.', $image_path)));
if ($ext == 'jpg' || $ext == 'jpeg') {
$img = @imagecreatefromjpeg($image_path);
} else if ($ext == 'png') {
$img = @imagecreatefrompng($image_path);
# Only if your version of GD includes GIF support
} else if ($ext == 'gif') {
$img = @imagecreatefromgif($image_path);
}

# If an image was successfully loaded, test the image for size
if ($img) {

# Get image size and scale ratio
$width = imagesx($img);
$height = imagesy($img);
$scale = min($MAX_WIDTH/$width, $MAX_HEIGHT/$height);

# If the image is larger than the max shrink it
if ($scale < 1) {
if (($width > $MAX_WIDTH) OR ($height > $MAX_HEIGHT)) {
$new_width = floor($scale*$width);
$new_height = floor($scale*$height);
# Create a new temporary image
$tmp_img = imagecreatetruecolor($new_width, $new_height);
# Copy and resize old image into new image
imagecopyresized($tmp_img, $img, 0, 0, 0, 0,
$new_width, $new_height, $width, $height);
imagedestroy($img);
$img = $tmp_img;
}
}
else{
header("Location: $image_path");
exit;
}}

# Create error image if necessary
if (!$img) {
$img = imagecreate($MAX_WIDTH, $MAX_HEIGHT);
imagecolorallocate($img,0,0,0);
$c2 = imagecolorallocate($img,70,70,70);
imageline($img,0,0,$MAX_WIDTH,$MAX_HEIGHT,$c2);
imageline($img,$MAX_WIDTH,0,0,$MAX_HEIGHT,$c2);
}

# Display the image
header("Content-type: image/jpeg");
imagejpeg($img);
?>

width и height - пределы, т.е. если картинка в соотношении 4:3 например 1600х1200, то тумба будет 200х150, т.е. большее число приравнивается к 200, второе подгоняется по соотношению.

Скрины получаются не очень сглаженные, но смотреть можно.

обращение - file.php?название_картинки.jpg

ЗЫ в своей версии сглажены + ширина х высота оригинала + размер оригинала написаны на скрине, так что увы выложить немогу. У меня двиг по заливке файлов и изображений.

Спустя 3 часа, 50 минут, 39 секунд (9.11.2008 - 06:11) Sylex написал(а):
Код

/**
* Изменение размеров изображения
*
*
@param string $src - имя исходного файла
*
@param string $dest - имя генерируемого файла
*
@param integer $width - ширина генерируемого изображения
*
@param integer $height - высота генерируемого изображения
* Необязательные параметры:
*
@param integer $rgb - цвет фона, по умолчанию - белый
*
@param integer $quality - качество генерируемого JPEG, по умолчанию - 85
*
@return bool
*/

function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=85)
{
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;

// Создаем новое изображение
$idest = imagecreatetruecolor($width, $height);
$isrc = $icfunc($src);

// Копируем существующее изображение в новое с изменением размера:
imagecopyresampled(
$idest, // Идентификатор нового изображения
$isrc, // Идентификатор исходного изображения
0,0, // Координаты (x,y) верхнего левого угла
// в новом изображении

0,0, // Координаты (x,y) верхнего левого угла копируемого
// блока существующего изображения

$width, // Новая ширина копируемого блока
$height, // Новая высота копируемого блока
$size[0], // Ширина исходного копируемого блока
$size[1] // Высота исходного копируемого блока
);

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

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

return true;

}


p.s. imagecopyresampled обрабатывает немного лучше imagecopyresized. Новые размеры блока высчитывать строго пропорционально, чтобы не было искажений.

Спустя 4 месяца, 5 дней, 21 час, 4 секунды (15.03.2009 - 03:11) Гость_павел написал(а):

<?php

$src= "102.jpeg";
$width='200';
$height='250';
$$dest= "1.jpg";

function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=85)
{
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;

// Создаем новое изображение
$idest = imagecreatetruecolor($width, $height);
$isrc = $icfunc($src);

// Копируем существующее изображение в новое с изменением размера:
imagecopyresampled(
$idest, // Идентификатор нового изображения
$isrc, // Идентификатор исходного изображения
0,0, // Координаты (x,y) верхнего левого угла
// в новом изображении

0,0, // Координаты (x,y) верхнего левого угла копируемого
// блока существующего изображения

$width, // Новая ширина копируемого блока
$height, // Новая высота копируемого блока
$size[0], // Ширина исходного копируемого блока
$size[1] // Высота исходного копируемого блока
);

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

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

return true;

}

?>


ни чего не появляется на экране...



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

<?php

$nn=('./image/'.$id.'/'.$ct);

if(is_dir($nn))
{

echo "папка с таким именем уже существует";
}
else {mkdir('./image/'.$id.'/'.$ct);
echo "папка ".$id." создана";
}
$imgblock=$_FILES['uploadfile']['name'];
$uploaddir = '/$id/';



$uploadfile = ('./image/'.$id.'/'.$ct.'/').basename($_FILES['uploadfile']['name']);


$imageinfo = getimagesize($_FILES['uploadfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/png' ) {
echo "Sorry, we only accept GIF and JPEG images\n";
exit;}
else {


if (copy($_FILES['uploadfile']['tmp_name'], $uploadfile))
{
echo "<h3>Файл успешно загружен на сервер</h3>";
}
else { echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>"; exit; }


echo "<h3>Информация о загруженном на сервер файле: </h3>";
echo "<p><b>Оригинальное имя загруженного файла: ".$_FILES['uploadfile']['name']."</b></p>";
echo "<p><b>Mime-тип загруженного файла: ".$_FILES['uploadfile']['type']."</b></p>";
echo "<p><b>Размер загруженного файла в байтах: ".$_FILES['uploadfile']['size']."</b></p>";
echo "<p><b>Временное имя файла: ".$_FILES['uploadfile']['tmp_name']."</b></p>";

}
?>


<img src="<?php echo $uploadfile ?>">

Спустя 15 минут, 19 секунд (15.03.2009 - 03:26) Гость_павел написал(а):

и почему это всё время происходить? вместо картинки



JFIF������яю�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality яЫ�C�    $.' ",#(7),01444'9=82<.342яЫ�C  2!!22222222222222222222222222222222222222222222222222яА�  "�яД����������� яД�µ���}�!1AQa"q2Ѓ‘Ў#B±БRСр$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzѓ„…†‡€‰Љ’“”•–—�™љўЈ¤Ґ¦§Ё©ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪбвгдежзийкстуфхцчшщъяД�������� яД�µ��w�!1AQaq"2ЃB‘Ў±Б #3RрbrС $4б%с&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ѓ„…†‡€‰Љ’“”•–—�™љўЈ¤Ґ¦§Ё©ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪвгдежзийктуфхцчшщъяЪ� ��?�щюЉ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( 


Спустя 10 часов, 7 минут, 55 секунд (15.03.2009 - 13:34) waldicom написал(а):
Цитата
и почему это всё время происходить? вместо картинки

Возможно не отсылается header?

Спустя 2 часа, 43 минуты, 43 секунды (15.03.2009 - 16:18) Гость_павел написал(а):
Цитата
Возможно не отсылается header?


а в чем может быть причина?

Спустя 1 минута, 6 секунд (15.03.2009 - 16:19) Гость_павел написал(а):
и что сделать чтоб отсылался?

Спустя 4 часа, 52 секунды (15.03.2009 - 20:20) Sylex написал(а):
в начале:
PHP
header("Content-type: image/jpeg");

Спустя 8 месяцев, 3 дня, 23 часа, 35 минут, 48 секунд (19.11.2009 - 19:55) Guest написал(а):
не могу загрузить фото при регистрации грин карт. две загрузила а ребенка не получается. пишет error; file size empty

Спустя 1 день, 9 часов, 30 минут, 33 секунды (21.11.2009 - 05:26) HardWoman написал(а):
Ну так ошибку пишет - размер файла не нравится - пишет пустой - во всяком случае перевод такой, не видит его что ли? Может расширение не нравится? а другие фото в каком расширении были? Посмотрите и эту фотку тоже в тот формат, что и другие фото переведите.

Спустя 2 дня, 15 часов, 32 минуты, 20 секунд (23.11.2009 - 20:58) Ulanych написал(а):
Может вместо
if (copy($_FILES['uploadfile']['tmp_name'], $uploadfile))
попробовать использовать
if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile))

И на сколько я понимаю, Вы пытаетесь вывести на монитор временный файл... Я пытался - у меня не вышло. Получилось вывести только файл, который мы получаем функцией move_uploaded_file(), т.е. уже постоянный, а не временный файл.

Спустя 20 минут, 54 секунды (23.11.2009 - 21:19) Ulanych написал(а):
Вот моя форма (я вырезал все, что можно только было, оставил суть) для загрузки 2-х картинок одновременно. Проверка расширения файла не производится, но добавить ее пять минут.

<?php
// Проверяем отправлены ли данные
if (!$_FILES['userfile']['name'])
{
$show = "Еще ничего не отправлено!";
}
else
{
$show = "Все нормально отправлено!";
}
?>

<html>
<
head>
</
head>
<
body>
<
form enctype="multipart/form-data" action="" method="post" name="add_img">
<
input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
Отправить этот файл 1: <input name="userfile[]" type="file" /> <br />
Отправить этот файл 2: <input name="userfile[]" type="file" /> <br />
<
input type="submit" value="Загрузить!" />
</
form>
<
br />

<?php
// Просто печатаем отосланы данные или еще нет
print "<b>".$show."</b><br />";

// Корневая папка сервера (домена)
$main_dir = $_SERVER['DOCUMENT_ROOT'];

// Эта директория, куда мы будем сохранять файлы для постоянного хранения
$uploaded_img_dir = $main_dir.'/images/uploads/';

// Это фактически полный путь и имя для первого загруженного файла
$uploaded_file_1 = "$uploaded_img_dir".basename($_FILES['userfile']['name'][0]);

// Это фактически полный путь и имя для второго загруженного файла
$uploaded_file_2 = "$uploaded_img_dir".basename($_FILES['userfile']['name'][1]);

print "<pre>";

// Проверяем загружены ли файлы и, если загружены, переносим их в каталог для постоянного хранения
if ((move_uploaded_file($_FILES['userfile']['tmp_name'][0], $uploaded_file_1)) &&
(
move_uploaded_file($_FILES['userfile']['tmp_name'][1], $uploaded_file_2)))
{
?>

<img src="<?php print '/images/uploads/'.$_FILES['userfile']['name'][0]; ?>" width="240" />
<
br />
<
img src="<?php print '/images/uploads/'.$_FILES['userfile']['name'][1]; ?>" width="240" />
<
br />

<?php
}
else
{
print "Ничего не вышло!\n";
}
print "</pre>";
?>
</body>
</
html>

О, заметил, что вырезал лишнее - переименование файла. Я добавил к имени файла строку что-то типа:

<?php
$new_file_name = md5(time())."_"."$old_file_name";
?>

Спустя 5 месяцев, 18 дней, 20 часов, 28 минут, 55 секунд (12.05.2010 - 16:48) xc написал(а):
[*][list][fliph] user posted image

Спустя 1 месяц, 28 дней, 6 часов, 55 минут, 47 секунд (10.07.2010 - 23:44) Yurchi написал(а):
функция зачётная, но каждый раз высчитывать размер исходного изображения согласно пропроциям как-то трудно. Вот мой маленький вклад в её развитие smile.gif


function img_resize($src, $dest, $m_width, $m_height, $rgb=0xFFFFFF, $quality=85)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

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

if ( ($size[0] / $size[1]) => 1 ) //если ширина больше чем высота и ореентируемся по ней
{
$width = $m_width;
$height = ( $size[1] * $width ) / $size[0];
} else // если наооборот
{
$height = $m_height;
$width = ( $height * $size[0] ) / $size[1];
}

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.

$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;

// Создаем новое изображение
$idest = imagecreatetruecolor($width, $height);
$isrc = $icfunc($src);

// Копируем существующее изображение в новое с изменением размера:
imagecopyresampled(
$idest, // Идентификатор нового изображения
$isrc, // Идентификатор исходного изображения
0,0, // Координаты (x,y) верхнего левого угла
// в новом изображении

0,0, // Координаты (x,y) верхнего левого угла копируемого
// блока существующего изображения

$width, // Новая ширина копируемого блока
$height, // Новая высота копируемого блока
$size[0], // Ширина исходного копируемого блока
$size[1] // Высота исходного копируемого блока
);

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

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

return true;

}


теперь $m_height и $m_width - это максимальные размеры, а функция будет их масштабировать согласно пропорциям biggrin.gif
enjoy


_____________
Быстрый ответ:

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