Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Максим1889
48 / 48 / 14
Регистрация: 25.03.2013
Сообщений: 740
1

Уменьшения разрешения изображений

23.07.2013, 20:27. Просмотров 4814. Ответов 61
Метки нет (Все метки)

Есть такой скрипт загрузки изображений как сделать чтоб разрешение загружаемого изображения было уменьшено до
800 х 600.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
if(!isset($_FILES['userfile']['tmp_name'])) die ('нет фаила?');
 
$uploaddir = 'gallery/'; //это папка, в которую будет загружаться картинка
$apend=date('YmdHis').rand(100,1000).'.jpg'; //новое имя изображения
$uploadfile = "$uploaddir$apend"; // в переменную $uploadfile будет входить папка и имя изображения
//Проверка расширений загружаемых изображений
if($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=2048000) // Здесь мы проверяем размер если он более 1 МБ
{ 
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) // Здесь идет процесс загрузки изображения
{ 
$size = getimagesize($uploadfile); // с помощью этой функции мы можем получить размер пикселей изображения
if ($size[0] < 20000 && $size[1]<60010) // если размер изображения не более 600 пикселей по ширине и не более 5000 по высоте
{ 
echo "Файл загружен. Путь к файлу";
$query = "INSERT INTO `doska_photogallery` SET `name_pg`='$apend', `pos_pg`='$id', `PRIMARY KEY`='$text'";
$res = mysql_query($query);
}
else 
{
echo "Размер пикселей превышает допустимые нормы (ширина не более - 600 пикселей, высота не более 5000)"; 
unlink($uploadfile); // удаление файла
}
} 
else 
{
echo "Файл не загружен, верьнитель и попробуйте еще раз";
}
}
Добавлено через 2 часа 1 минуту
Ребят ну выручите кто-нибудь, а то я весь нет уже перерыл нарыл вот такю функцию, а ума ей дать не могу function ResizeImage

Добавлено через 23 часа 59 минут
Или это не реально, скажите чтобы я не мучился уже?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 20:27
Ответы с готовыми решениями:

Уменьшение разрешения, разных изображений
Есть такая проблема, если загрузить изображение, у которого сторона x короче стороны y, то всё...

загрузка изображений относительно разрешения монитора
как можно реализовать загрузка изображений как на этом сайте http://funkyflick.com/ ,если...

Редактор изображений - уменьшение разрешения, обрезка
Доброго времени суток. Есть задание написать редактор изображений с минимум функций(win32). Функции...

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

61
Evgeniy71rus
32 / 32 / 5
Регистрация: 15.11.2010
Сообщений: 166
23.07.2013, 22:02 2
Может это поможет
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
  $src             - имя исходного файла
  $dest            - имя генерируемого файла
  $width, $height  - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
  $rgb             - цвет фона, по умолчанию - белый
  $quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
***********************************************************************************/
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;
 
    $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];
    
    if ($height == 0)
    { 
        $y_ratio = $x_ratio;
        $height  = $y_ratio * $size[1];
    }
    elseif ($width == 0)
    { 
        $x_ratio = $y_ratio;
        $width   = $x_ratio * $size[0];
    }
    
    $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);
     
    // если не нужно увеличивать маленькую картинку до указанного размера
    if ($size[0]<$new_width && $size[1]<$new_height)
    {
        $width = $new_width = $size[0];
        $height = $new_height = $size[1];
    }
 
    $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]);
 
    $i = strrpos($dest,'.');
    if (!$i) return '';
    $l = strlen($dest) - $i;
    $ext = substr($dest,$i+1,$l);
    
    switch ($ext)
    {
        case 'jpeg':
        case 'jpg':
        imagejpeg($idest,$dest,$quality);
        break;
        case 'gif':
        imagegif($idest,$dest);
        break;
        case 'png':
        imagepng($idest,$dest);
        break;
    }
 
    imagedestroy($isrc);
    imagedestroy($idest);
 
    return true;  
}
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
23.07.2013, 22:25 3
https://www.cyberforum.ru/post4432491.html
1
Максим1889
48 / 48 / 14
Регистрация: 25.03.2013
Сообщений: 740
24.07.2013, 09:11  [ТС] 4
Цитата Сообщение от KOPOJI Посмотреть сообщение
Обрезать изображение без потери "качаства"
Где же вы были раньше. Как раз то что нужно
0
KOPOJI
24.07.2013, 09:46
  #5

Не по теме:

здесь и был.. А подобный скрипт, до переделывания я выкладывал еще в том году :pardon: https://www.cyberforum.ru/post3601980.html

0
Максим1889
48 / 48 / 14
Регистрация: 25.03.2013
Сообщений: 740
24.07.2013, 10:59  [ТС] 6
KOPOJI, Еще бы вы мне подсказали возможно ли это чудесный image_resize прикрутить к моему выше упомянутому скрипту.?

вот он еще раз

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?
echo'<form ENCTYPE="multipart/form-data" action="#" method="POST">
&nbsp;&nbsp;&nbsp;&nbsp;<input name="userfile" type="file"/>
<input name="name" type="submit" value="Добавить">';
if(!isset($_FILES['userfile']['tmp_name'])) die ('нет фаила?'); 
$uploaddir = 'image/'; //это папка, в которую будет загружаться картинка
$apend=date('YmdHis').rand(100,1000).'.jpg'; //новое имя изображения
$uploadfile = "$uploaddir$apend"; // в переменную $uploadfile будет входить папка и имя изображения
//Проверка расширений загружаемых изображений
if($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=2048000) // Здесь мы проверяем размер если он более 1 МБ
{ 
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) // Здесь идет процесс загрузки изображения
{ 
$size = getimagesize($uploadfile); // с помощью этой функции мы можем получить размер пикселей изображения
if ($size[0] < 20000 && $size[1]<60010) // если размер изображения не более 600 пикселей по ширине и не более 5000 по высоте
{ 
echo "Файл загружен. '$uploaddir$apend' Путь к файлу
<meta http-equiv='Refresh' content='10; URL=index-.php'>";
}
else 
{
echo "Размер пикселей превышает допустимые нормы (ширина не более - 600 пикселей, высота не более 5000)"; 
}
} 
else 
{
echo "Файл не загружен, верьнитель и попробуйте еще раз";
}
}
 
?>
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
24.07.2013, 13:07 7
а в чем именно проблема..?
0
Максим1889
48 / 48 / 14
Регистрация: 25.03.2013
Сообщений: 740
24.07.2013, 13:14  [ТС] 8
Да я не могу сообразить куда эту функции вставить у меня либо ошибку дает, либо скрипт не выполняется
предполагаю что конструкция должна быть примерно вот такой
PHP
1
image_resize($_FILES['userfile']['tmp_name'],$file,120, 150)
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
24.07.2013, 14:06 9
в теме по первой ссылке есть примеры использования.. а у вас непонятно, откуда возьмется $file
0
Максим1889
48 / 48 / 14
Регистрация: 25.03.2013
Сообщений: 740
24.07.2013, 15:13  [ТС] 10
Вот этот пример мне не понятно что за адрес сохранения Это папка сохранения??
if(imageResize('изначальный адрес картинки', 'адрес сохранения', ширина, высота))
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
24.07.2013, 16:18 11
нет, полный путь, включая название и тип файла
1
DanteLoL
5 / 6 / 2
Регистрация: 13.06.2013
Сообщений: 134
29.07.2013, 16:32 12
KOPOJI, а эта волшеПная функция она для любого формата проходит?? мне просто идут на сайт 3 формата Гиф Пинг и Жпг нужно что бы из все уменьшало?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
29.07.2013, 16:33 13
для этих трех подойдет
0
Максим1889
48 / 48 / 14
Регистрация: 25.03.2013
Сообщений: 740
29.07.2013, 16:34  [ТС] 14
Да функция действительно волшебная, но только заметно тормозит работу скрипта. Ну по крайне мере у меня.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
29.07.2013, 16:37 15
потому что работа с графикой через GD/GD2 в php неплохо кушает, особенно на больших файлах

Добавлено через 1 минуту
стоит ограничить размер файлов, к примеру, парой мегабайт, и уже будет относительно нормально.
0
DanteLoL
5 / 6 / 2
Регистрация: 13.06.2013
Сообщений: 134
29.07.2013, 16:48 16
KOPOJI, во! вот только он упорно мне указывает "что изображения должны бытьв формате ..." вобщем функция False возвращяет(
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
$uploaddir='uploadimages/';//папка, куда будет загружаться картинка
 
 
$date=time();
//пробуем сжать картинку
$filename = $_FILES['uploadfile']['name'];
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
    $format = ".gif"; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
    }
    if(preg_match('/[.](PNG)|(png)$/', $filename)) {
    $format = ".png";//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
    }
    
    if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
        $format = ".jpg"; //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
    }
//-------------------------------------------
function imageResize($src, $dst, $width, $height, $crop=0){
 
    if(!($info = @getimagesize($src)))
        return false;
 
    $w = $info[0];
    $h = $info[1];
    $type = substr($info['mime'], 6);
 
    $func = 'imagecreatefrom' . $type;
 
    if(!function_exists($func))
        return false;
    $img = $func($src);
 
    if($crop) // изменение размера (непропорциональное)
    {
        if($w < $width || $h < $height)
            return false; //еще меньше
        $ratio = max($width/$w, $height/$h);
        $h = $height / $ratio;
        $x = ($w - $width / $ratio) / 2;
        $w = $width / $ratio;
    }
    else // пропорциональное
    {
        if($w < $width && $h < $height)
            return false; // еще меньше
        $ratio = min($width/$w, $height/$h);
        $width = $w * $ratio;
        $height = $h * $ratio;
        $x = 0;
    }
 
    $new = imagecreatetruecolor($width, $height);
    // прозрачность
    if($type == 'gif' || $type == 'png')
    {
        imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
        imagealphablending($new, false);
        imagesavealpha($new, true);
    }
    imagecopyresampled($new, $img, 0, 0, $x, 0, $width, $height, $w, $h);
 
    $save = 'image' . $type;
 
    return $save($new, $dst);
}
//-------------------------------------------
if(imageResize('$_FILES["uploadfile"]["name"]', '$uploaddir.$date.$format', 600, 500))
{
    $uploadimg = $uploaddir.$date.$format;
}
else
{
  exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG"); //останавливаем выполнение сценариев
 
}
 
//move_uploaded_file($_FILES["uploadfile"]["tmp_name"], "$uploaddir".$_FILES["uploadfile"]["name"]);
//$uploadimg = $uploaddir.$_FILES["uploadfile"]["name"];
}
 
$result2 = mysql_query("INSERT INTO messages (author, poluchatel, date, text, imgfile) VALUES ('$author','$poluchatel','$date','$text','$uploadimg')",$db);//заносим в базу сообщение
 
echo "<html><head><meta http-equiv='Refresh' content='2; URL=page.php?id=".$id."'></head><body>Ваше сообщение передано! Вы будете перемещены через 2 сек. Если не хотите ждать, то <a href='page.php?id=".$id."'>нажмите сюда.</a></body></html>";//перенаправляем пользователя
?>
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
29.07.2013, 16:58 17
Цитата Сообщение от DanteLoL Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
* * $format = ".gif"; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
* * }
* * if(preg_match('/[.](PNG)|(png)$/', $filename)) {
* * $format = ".png";//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
* * }
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
* * * * $format = ".jpg"; //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
* * }
PHP
1
2
if(preg_match('~\.(jpe?g|png|gif)$~i', $filename, $match))
    $format = '.' . ($match[1] == 'jpeg' ? 'jpg' : $match[1]);
Цитата Сообщение от DanteLoL Посмотреть сообщение
PHP
1
if(imageResize('$_FILES["uploadfile"]["name"]', '$uploaddir.$date.$format'
1. Переменные в одинарных апострофах "не обрабатываются".
2. Доступа к файловой системе пользователя вам никто не даст, поэтому передавать надо не $_FILES['uploadfile']['name'], а $_FILES['uploadfile']['tmp_name']

Добавлено через 1 минуту
кстати, в коде не учитывается ситуация, если "не preg_match" - переменная $format будет отсутствовать
0
DanteLoL
5 / 6 / 2
Регистрация: 13.06.2013
Сообщений: 134
29.07.2013, 17:03 18
KOPOJI, вот поправил.. но тот же эфект(

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
$uploaddir='uploadimages/';//папка, куда будет загружаться картинка
 
 
$date=time();
//пробуем сжать картинку
$filename = $_FILES['uploadfile']['name'];
if(preg_match('~\.(jpe?g|png|gif)$~i', $filename, $match))
    $format = '.' . ($match[1] == 'jpeg' ? 'jpg' : $match[1]);
 
 
//-------------------------------------------
function imageResize($src, $dst, $width, $height, $crop=0){
 
    if(!($info = @getimagesize($src)))
        return false;
 
    $w = $info[0];
    $h = $info[1];
    $type = substr($info['mime'], 6);
 
    $func = 'imagecreatefrom' . $type;
 
    if(!function_exists($func))
        return false;
    $img = $func($src);
 
    if($crop) // изменение размера (непропорциональное)
    {
        if($w < $width || $h < $height)
            return false; //еще меньше
        $ratio = max($width/$w, $height/$h);
        $h = $height / $ratio;
        $x = ($w - $width / $ratio) / 2;
        $w = $width / $ratio;
    }
    else // пропорциональное
    {
        if($w < $width && $h < $height)
            return false; // еще меньше
        $ratio = min($width/$w, $height/$h);
        $width = $w * $ratio;
        $height = $h * $ratio;
        $x = 0;
    }
 
    $new = imagecreatetruecolor($width, $height);
    // прозрачность
    if($type == 'gif' || $type == 'png')
    {
        imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
        imagealphablending($new, false);
        imagesavealpha($new, true);
    }
    imagecopyresampled($new, $img, 0, 0, $x, 0, $width, $height, $w, $h);
 
    $save = 'image' . $type;
 
    return $save($new, $dst);
}
//-------------------------------------------
if(imageResize('$_FILES["uploadfile"]["tmp_name"]', '$uploaddir.$date.$format', 600, 500))
{
    $uploadimg = $uploaddir.$date.$format;
}
else
{
  exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG"); //останавливаем выполнение сценариев
 
}
 
//move_uploaded_file($_FILES["uploadfile"]["tmp_name"], "$uploaddir".$_FILES["uploadfile"]["name"]);
//$uploadimg = $uploaddir.$_FILES["uploadfile"]["name"];
}
 
$result2 = mysql_query("INSERT INTO messages (author, poluchatel, date, text, imgfile) VALUES ('$author','$poluchatel','$date','$text','$uploadimg')",$db);//заносим в базу сообщение
 
echo "<html><head><meta http-equiv='Refresh' content='2; URL=page.php?id=".$id."'></head><body>Ваше сообщение передано! Вы будете перемещены через 2 сек. Если не хотите ждать, то <a href='page.php?id=".$id."'>нажмите сюда.</a></body></html>";//перенаправляем пользователя
?>
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
29.07.2013, 17:05 19
а первый пункт я разве не писал?)
Цитата Сообщение от KOPOJI Посмотреть сообщение
1. Переменные в одинарных апострофах "не обрабатываются".
PHP
1
2
3
4
$foo = 'bar';
echo $foo; //bar
echo "$foo"; //bar
echo '$foo'; //$foo
1
DanteLoL
5 / 6 / 2
Регистрация: 13.06.2013
Сообщений: 134
29.07.2013, 17:15 20
KOPOJI, все отлично спасибо! вот только в этому участке где данные в базу заносятся что то не так стало ОО при том что фото в каталоге появляется но в базу кажется не заносится запись не появляется(
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(imageResize($_FILES["uploadfile"]["tmp_name"], $uploaddir.$date.$format, 600, 500))
{
    $uploadimg = $uploaddir.$date.$format;
}
else
{
  exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG"); //останавливаем выполнение сценариев
 
}
 
//move_uploaded_file($_FILES["uploadfile"]["tmp_name"], "$uploaddir".$_FILES["uploadfile"]["name"]);
 
}
 
$result2 = mysql_query("INSERT INTO messages (author, poluchatel, date, text, imgfile) VALUES ('$author','$poluchatel','$date','$text','$uploadimg')",$db);//заносим в базу сообщение
 
echo "<html><head><meta http-equiv='Refresh' content='2; URL=page.php?id=".$id."'></head><body>Ваше сообщение передано! Вы будете перемещены через 2 сек. Если не хотите ждать, то <a href='page.php?id=".$id."'>нажмите сюда.</a></body></html>";//перенаправляем пользователя
?>
0
29.07.2013, 17:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 17:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нужно исправить ошибки в программе по изменению разрешения .bmp изображений
Программа должна изменить разрешение бмп файла просто продублировав пиксли k-раз. Была фотография...

Низкочастотная фильтрация изображений (книга Гонсалеса “Цифровая обработка изображений”)
Здравствуйте. Я пытаюсь реализовать на java низкочастотную фильтрацию изображений. Реализую по...

Кодирование изображений и их защита файлов изображений от несанкционированного доступа
Нужны мысли, исходники программ по поводу этой темы. Примерный алгоритм действий есть: ...

Смена изображений при обновлении страницы. Адаптивность изображений
Здравствуйте! Нашел скрипт, который изменяет изображение при обновлении страницы, он меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.