также сделать ограничение по размеру и расширению...
как это реализовать?
заранее благодарен за любой совет.
Спустя 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)
функция:
отображаем рисунок -
--------------------------------
все работает, только как зделать так чтоб масштаб уменьшить и убрать width="191" height="191" .... может кто поможет
авто-изменение размеров подскажите?
чтоб залить картинку - нужно
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 написал(а):
Т.к. мое текущее изменение размера создано исключительно для комерческих целей, вот самая простая версия уменьшения изображений:
width и height - пределы, т.е. если картинка в соотношении 4:3 например 1600х1200, то тумба будет 200х150, т.е. большее число приравнивается к 200, второе подгоняется по соотношению.
Скрины получаются не очень сглаженные, но смотреть можно.
обращение - file.php?название_картинки.jpg
ЗЫ в своей версии сглажены + ширина х высота оригинала + размер оригинала написаны на скрине, так что увы выложить немогу. У меня двиг по заливке файлов и изображений.
<?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 написал(а):
Код
p.s. imagecopyresampled обрабатывает немного лучше imagecopyresized. Новые размеры блока высчитывать строго пропорционально, чтобы не было искажений.
/**
* Изменение размеров изображения
*
* @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](http://phpforum.ru/html/emoticons/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 написал(а):
Может вместо
И на сколько я понимаю, Вы пытаетесь вывести на монитор временный файл... Я пытался - у меня не вышло. Получилось вывести только файл, который мы получаем функцией move_uploaded_file(), т.е. уже постоянный, а не временный файл.
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](http://pharm-forum.ru/smiles/applaus/applaus005.gif)
Спустя 1 месяц, 28 дней, 6 часов, 55 минут, 47 секунд (10.07.2010 - 23:44) Yurchi написал(а):
функция зачётная, но каждый раз высчитывать размер исходного изображения согласно пропроциям как-то трудно. Вот мой маленький вклад в её развитие ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
теперь $m_height и $m_width - это максимальные размеры, а функция будет их масштабировать согласно пропорциям
enjoy
![smile.gif](http://phpforum.ru/html/emoticons/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](http://phpforum.ru/html/emoticons/biggrin.gif)
enjoy
_____________