Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/36: Рейтинг темы: голосов - 36, средняя оценка - 4.67
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276

Обрезка изображения на "лету"

24.05.2011, 10:18. Показов 7579. Ответов 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
<? 
function resizeimgW($filename, $smallimage, $w, $h)
  {
    // Имя файла с масштабируемым изображением
    $filename = $filename;
    // Имя файла с уменьшенной копией.
    $smallimage = $smallimage;
    // определим коэффициент сжатия изображения, которое будем генерить
    $ratio = $w/$h;
    // получим размеры исходного изображения
    $size_img = getimagesize($filename);
    // получим коэффициент сжатия исходного изображения
    $src_ratio=$size_img[0]/$size_img[1];
    // Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
    // пропорции исходного изображения
    if ($ratio>$src_ratio)
            {
              $h = $w/$src_ratio;
            }
    else
            {
              $w = $h*$src_ratio;
            }
    // создадим пустое изображение по заданным размерам
    $dest_img = imagecreatetruecolor($w, $h);
    // создаем jpeg из файла
    $src_img = imagecreatefromjpeg($filename);
    // масштабируем изображение     функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии
    // $size_img[0] - ширина исходного изображения
    // $size_img[1] - высота исходного изображения
    imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
    // сохраняем уменьшенную копию в файл
    imagejpeg($dest_img, $smallimage);
    // чистим память от созданных изображений
    imagedestroy($dest_img);
    imagedestroy($src_img);
    return true;
  }
  /**
/* @desc функция вырезает на картинке произвольную отцентрованную область
/* @param $filename путь к файлу с исходной картинкой
/* @param $w нужная ширина "обрезка"
/* @param $h нужная высота "обрезка"
/* @param $target_filename  куда записывать результат. Если не указать, то перепишется исходный файл.
*/
  function evokeAlignedAreaT($filename,$w,$h,$target_filename=null){
    $thumb = imagecreatetruecolor($w, $h);
    $bgc = imagecolorallocate($thumb, 255, 255, 255);
    imagefilledrectangle($thumb, 0, 0, $w, $h, $bgc);
    $source = imagecreatefromjpeg($filename);
    $size = GetImageSize($filename);
    $x = round(($size[0]-$w)/2);
    $y = round(($size[1]-$h)/2);
    imagecopyresampled($thumb, $source, 0, 0, $x, $y, $w, $h, $w, $h);
    $target_filename = is_null($target_filename)?$filename:$target_filename;
    imagejpeg($thumb,'', 100);
    imagedestroy($thumb);
    imagedestroy($source);
    return true;
  }?>
Но у него есть один недостаток: функция resizeimgW() сохраняет изображение в файл, а функция evokeAlignedAreaT() потом, взяв сохранённое изображение вырезает середину и выводит в браузер. А я хочу чтобы эти функции работали примерно так:
Чтобы функция resizeimgW() не сохраняла изображение в файл, а на лету передавала его в функцию evokeAlignedAreaT(), а та в свою очередь, уже вырезала и выводила в браузер.
Может, кто подскажет как это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.05.2011, 10:18
Ответы с готовыми решениями:

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

Обрезка изображения
&lt;?php /* $x_o и $y_o - координаты левого верхнего угла выходного изображения на исходном $w_o и h_o - ширина и высота выходного...

Обрезка изображения в GD2
Доброго времени суток товарищи. Признаюсь, я довольно плохо знаком с gd2 поэтому скорее всего заблудился в трех соснах)) В общем имеется...

2
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
25.05.2011, 12:45
А зачем из функции в функцию что-то передавать, если можно сделать всё в одной?
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
function resizeimgW($filename, $resizeWidth, $resizeHeight, $trimWidth, $trimHeight)
  {
    // Имя файла с масштабируемым изображением
    $filename = $filename;
    // определим коэффициент сжатия изображения, которое будем генерить
    $ratio = $resizeWidth/$resizeHeight;
    // получим размеры исходного изображения
    $size_img = getimagesize($filename);
    // получим коэффициент сжатия исходного изображения
    $src_ratio=$size_img[0]/$size_img[1];
    // Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
    // пропорции исходного изображения
    if ($ratio>$src_ratio)
            {
              $resizeHeight = floor($resizeWidth/$src_ratio);
            }
    else
            {
              $resizeWidth = floor($resizeHeight*$src_ratio);
            }
    // создадим пустое изображение по заданным размерам
    $dest_img = imagecreatetruecolor($resizeWidth, $resizeHeight);
    // создаем jpeg из файла
    $src_img = imagecreatefromjpeg($filename);
    // масштабируем изображение     функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $resizeWidth - ширина уменьшенной копии
    // $resizeHeight - высота уменьшенной копии
    // $size_img[0] - ширина исходного изображения
    // $size_img[1] - высота исходного изображения
    imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $resizeWidth, $resizeHeight, $size_img[0], $size_img[1]);
    // чистим память от созданных изображений
    imagedestroy($src_img);
 
    $thumb = imagecreatetruecolor($trimWidth, $trimHeight);
    $bgc = imagecolorallocate($thumb, 255, 255, 255);
    imagefilledrectangle($thumb, 0, 0, $trimWidth, $trimHeight, $bgc);
    $x = round(($resizeWidth-$trimWidth)/2);
    $y = round(($resizeHeight-$trimHeight)/2);
    imagecopyresampled($thumb, $dest_img, 0, 0, $x, $y, $trimWidth, $trimHeight, $trimWidth, $trimHeight);
    $target_filename = is_null($target_filename)?$filename:$target_filename;
    imagejpeg($thumb,'', 100);
    imagedestroy($thumb);
    imagedestroy($dest_img);
    return true;
  }
 
 
header('Content-Type: image/jpg');
$image = resizeimgW("big.jpg", 1000, 800, 500, 400);
3
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.05.2011, 13:13  [ТС]
hellpass, огромное спасибо! А-то я уже и не надеялся получить ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2011, 13:13
Помогаю со студенческими работами здесь

Обрезка изображения до формата 10x15
Добрый день, Возникла необходимость обрезать фото до формата сторон 10x15, притом новое изображение должно быть центром по...

Изменение размера и обрезка изображения
Подскажите пожалуйста новичку, как создать вот такой скрипт изменение размера и обрезки изображения - ...

Обрезка и масштабирование изображения при загрузке на сервер
На сервер загружается изображение и из него делает 3 копии, маленькая 80х80, средняя 250x250 и большие 600х600 суть в том что когда...

Обрезка изображения по маске
Здравствуйте, форумчане:) Не знаю верно ли я выбрал тему и возможно ли подобное сделать на PHP, но надеюсь что вы мне поможете. В...

Обрезка изображения
Здрасте! Подскажите, как можно преобразовать изображение по заданным пропорциям, а потом обрезать изображение так что бы оно обрезалось...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru