PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Sergiiuss
Отправлено: 10 Апреля, 2009 - 11:02:07
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2009
Помог: 0 раз(а)
Нужно зделать чтобы через форму загрузки:
CODE (
text ):
скопировать код в буфер обмена
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000"><!--размер файла в байтах-->
Послать файл: <input name="userfile" type="file">
<input type="submit" value="Загрузить рисунок">
</form>
можно было загрузить рисунки таких форматов: JPG, JPEG, GIF, PNG, TIF
При этом на сервере в папке /images/ должно создаватся 3 копии данного рисунка различных размеров:
- первый с обязательной шириной 200 прикселей и высотой до 700 пикселей
- второй с обязательной шириной 100 прикселей
- третий с обязательной шириной 50 прикселей
при этом нужно удалить старое название загружаемого изображения и присвоить каждому из рисунков новое.
Еще было бы неплохо прописать все проверки на ошибки.
Вот к какому обработчику я пришол, но он только JPG формат загружает, и неполучается указать папку /images/ скприпт выдавал ошибку :
PHP:
скопировать код в буфер обмена
<?
$w = 200 ; // Максимальная ширина конечного файла
$ww = 100 ;
$www = 50 ;
$q = 100 ; // Качество jpeg изображения
$file = $_FILES [ "userfile" ] [ "name" ] ; // Записываем оригинальное имя файла
$w_src = imagesx ( $src ) ; // Определяем его линейный размер по горизонтали (ширина) $h_src = imagesy ( $src ) ; // Определяем его линейный размер по вертикали (высота)
$dir = "$DOCUMENT_ROOT " ; // Папка, куда будет записан уже преобразованный файл
$path = "$dir $file " ; // Полный путь к файлу (включая и его имя)
if ( $w_src != $w ) // Проверяем не равна ли уже исходная ширина необходимой нам
{
if ( $w_src > $h_src or $h_src > $w_src ) // Если изображение горизонтальное или вертикальное
{
$ratio = $w_src / $w ; // Считаем соотношение пропорций
$w_dest = $w ; // Конечная ширина будет равна максимальной
$h_dest = round ( $h_src / $ratio ) ; // Считаем конечную высоту }
else // Если изображение квадратное
{
$w_dest = $w ; // Подставляем максимальные значения
$h_dest = $w ;
}
// Преобразуем исходное изображение в конечное (с новыми размерами).
// Функция использует ресемплинг, поэтому изображение будет лучшего
// качества, чем если использовать вместо imagecopyresampled функцию
// imagecopyresized
}
else
{
// Если исходная ширина равна нужной нам на выходе, то просто
// создаем временный файл без преобразований
}
if ( ! file_exists ( "$path " ) ) // Проверяем не существует ли уже файл {
$res = imagejpeg ( $dest , "$path " , $q ) ; // Копируем файл в папку if ( $res ) // Если скопировано успешно, выдаем сообщение об успехе
{
echo "Файл закачан1" ;
}
else // Если не скопировано, то выдаем сообщение об ошибке
{
echo "Ошибка записи файла!" ;
}
}
echo "<br>" ;
if ( $w_src != $ww ) // Проверяем не равна ли уже исходная ширина необходимой нам
{
if ( $w_src > $h_src or $h_src > $w_src ) // Если изображение горизонтальное или вертикальное
{
$ratio1 = $w_src / $ww ; // Считаем соотношение пропорций
$w_dest1 = $ww ; // Конечная ширина будет равна максимальной
$h_dest1 = round ( $h_src / $ratio1 ) ; // Считаем конечную высоту }
else // Если изображение квадратное
{
$w_dest1 = $ww ; // Подставляем максимальные значения
$h_dest1 = $ww ;
}
// Преобразуем исходное изображение в конечное (с новыми размерами).
// Функция использует ресемплинг, поэтому изображение будет лучшего
// качества, чем если использовать вместо imagecopyresampled функцию
// imagecopyresized
}
else
{
// Если исходная ширина равна нужной нам на выходе, то просто
// создаем временный файл без преобразований
}
if ( ! file_exists ( "a$path " ) ) // Проверяем не существует ли уже файл {
$res = imagejpeg ( $dest1 , "a$path " , $q ) ; // Копируем файл в папку if ( $res ) // Если скопировано успешно, выдаем сообщение об успехе
{
echo "Файл закачан2" ;
}
else // Если не скопировано, то выдаем сообщение об ошибке
{
echo "Ошибка записи файла!" ;
}
}
echo "<br>" ;
if ( $w_src != $www ) // Проверяем не равна ли уже исходная ширина необходимой нам
{
if ( $w_src > $h_src or $h_src > $w_src ) // Если изображение горизонтальное или вертикальное
{
$ratio2 = $w_src / $www ; // Считаем соотношение пропорций
$w_dest2 = $www ; // Конечная ширина будет равна максимальной
$h_dest2 = round ( $h_src / $ratio2 ) ; // Считаем конечную высоту }
else // Если изображение квадратное
{
$w_dest2 = $www ; // Подставляем максимальные значения
$h_dest2 = $www ;
}
// Преобразуем исходное изображение в конечное (с новыми размерами).
// Функция использует ресемплинг, поэтому изображение будет лучшего
// качества, чем если использовать вместо imagecopyresampled функцию
// imagecopyresized
}
else
{
// Если исходная ширина равна нужной нам на выходе, то просто
// создаем временный файл без преобразований
}
if ( ! file_exists ( "x$path " ) ) // Проверяем не существует ли уже файл {
$res = imagejpeg ( $dest2 , "x$path " , $q ) ; // Копируем файл в папку if ( $res ) // Если скопировано успешно, выдаем сообщение об успехе
{
echo "Файл закачан3" ;
}
else // Если не скопировано, то выдаем сообщение об ошибке
{
echo "Ошибка записи файла!" ;
}
}
?>
Помогите усовершенствовать
Ch_chov
Отправлено: 12 Апреля, 2009 - 16:26:34
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008
Откуда: из города
Помог: 90 раз(а)
Вот готовая функция для изменения размеров любых изображений
PHP:
скопировать код в буфер обмена
function img_resize( $src , $dest , $width , $height , $rgb = 0xFFFFFF, $quality = 100) {
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$icfunc = 'imagecreatefrom' . $format ;
$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 ) ;
$new_width , $new_height , $size [ 0] , $size [ 1] ) ;
return true ;
}
(Отредактировано автором: 12 Апреля, 2009 - 16:28:04)
Sergiiuss
Отправлено: 12 Апреля, 2009 - 18:24:37
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2009
Помог: 0 раз(а)
Большое спасибо за ответ, но у меня есть некоторые сложности.
Хочу уточнить насчет параметров вашей функции.
1) $src - нужно присваивать = imagecreatefromjpeg($_FILES["userfile"]["tmp_name"]); ?
2) $dest - нужно присваивать
$path ?
$dir = "$DOCUMENT_ROOT";
$file = $_FILES["userfile"]["name"];
$path = "$dir $file";
3) $width, $height - это мои - $w_dest, $h_dest ?
4) $rgb=0xFFFFFF, $quality=100 - когда я уже подставляю функцию их нужно прописывать?
img_resize ($src, $path, $w_dest, $h_dest);
или такого вида будет достаточно?
Вашу функцию нужно прописывать вместо моего следующего кода?
PHP:
скопировать код в буфер обмена
// Преобразуем исходное изображение в конечное (с новыми размерами).
// Функция использует ресемплинг, поэтому изображение будет лучшего
// качества, чем если использовать вместо imagecopyresampled функцию
// imagecopyresized
}
else
{
// Если исходная ширина равна нужной нам на выходе, то просто
// создаем временный файл без преобразований
}
if ( ! file_exists ( "x.jpg" ) ) // Проверяем не существует ли уже файл {
$res = imagejpeg ( $dest2 , "x.jpg" , $q ) ; // Копируем файл в папку if ( $res ) // Если скопировано успешно, выдаем сообщение об успехе
{
echo "Файл закачан3" ;
}
else // Если не скопировано, то выдаем сообщение об ошибке
{
echo "Ошибка записи файла!" ;
}
}
А то чтото пока не работает, буду благодарен за ответ (Отредактировано автором: 13 Апреля, 2009 - 09:17:42)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB