|
2 / 2 / 1
Регистрация: 01.10.2009
Сообщений: 53
|
|
Как изменить размер картинки24.08.2010, 22:44. Показов 26872. Ответов 9
Метки нет (Все метки)
Добрый день, подскажите скрипт (самый простой) для изменеия размеров картинки. Расширения картинок известно, размеры у всех одинаковые, и уменьшить надо пропорцианально для вставки в анонс поста.
0
|
|
| 24.08.2010, 22:44 | |
|
Ответы с готовыми решениями:
9
Как изменить размер картинки Изменить размер картинки php Изменить размер картинки в этом php коде |
|
#define книжный_червь Я
185 / 96 / 21
Регистрация: 30.01.2010
Сообщений: 780
|
|
| 24.08.2010, 23:29 | |
|
Я думаю, чтобы узнать размер изображения потребуется JavaScript. Я его не знаю!
0
|
|
|
|
||
| 25.08.2010, 03:59 | ||
|
0
|
||
|
bigMatherHacker
112 / 81 / 12
Регистрация: 18.08.2010
Сообщений: 237
|
|||||||||||||||||||||||||||||||||||||||||
| 25.08.2010, 11:53 | |||||||||||||||||||||||||||||||||||||||||
|
вот держи изучай. Тут довольно таки доступно все описано.[Ссылка удалена!]. Если будут вопросы, задавай.
Статья с ссылки
Статья описывает методику сложного форматирования изображений на PHP под нужный формат независимо от их начальных размеров и ориентации, но всегда выдаёт изображения строго определённого размера. В скрипте используются функции обработки изображений библиотеки GD. Скрипт будет полезен для новостных сайтов и фотогалерей.
Суть проблемы Работая над новостным сайтом, я столкнулся с проблемой хранения картинок к статьям в двух форматах – мелкий (90 на 90 для заголовочных блоков) и крупный (218 на сколько есть). Новости хранились в базе и добавлялись очень просто. С картинками выходило сложнее. Исходные изображения с цифровой фотокамеры (или цифрового макета бумажной газеты) загружались в PhotoShop и обрабатывались дизайнером под нужный формат. Уже сам факт ручной работы с графикой заставил задуматься об автоматизации. Кроме того, приходилось локально сохранять две картинки, а потом закачивать их через форму по отдельности, да чтоб ещё и не перепутать, где какая! Возникает избыточность, а размер занимаемого места становился всё больше и больше. Первые идеи С самого начала работы над проектом я знал, что существует такая вещь, как ImageMagick для Perl. Запустить этот чудо-модуль мне так и не удалось. Потом я перешёл на PHP, и понял, что Perl не совсем приспособлен для таких вещей. На PHP тоже можно формировать картинки с помощью модуля GD. Он хоть и попроще будет, но функции масштабирования в нём есть, что и требовалось. Постановка задачи – написать скрипт, получающий путь исходного изображения и выводил бы данные image/jpeg – картинку нужного формата (см. описание протокола HTTP). Скрипт масштабирования resize.php Входные параметры: $f – имя файла в виде path/file.jpg. Можно было придумать более защищённый способ адресации, но суть алгоритма не меняется. Например, предавать только номер статьи из базы, а скрипт сам бы определил местонахождение картинки; $q – качество сжатия JPEG; $type – формат картинки (в смысле линейные размеры) где в зависимости от значения $type производятся следующие действия: $type = 0 – из исходной картинки вырезается квадратная серединка и приводится к формату 90x90 пикселей; $type = 1 – исходная картинка масштабируется пропорционально и приводится к ширине 218 пикселей (опционально наносится надпись); $type = 2 – исходная картинка выводится без изменений. Посмотрим начало скрипта: resize.php
Следующее условие отвечает за размер выводимой картинки и непосредственно за вывод. Возможно, что исходная картинка уже нужного размера. Если это не так, обработаем её. Для этого поставим следующее условие:
imagecopyresized - копирует и изменяет размеры части изображения int imagecopyresized ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) imagecopyresized() копирует прямоугольную часть одного изображения в другое изображение. Dst_im - результирующее изображение, src_im - исходное изображение. Если исходные и координаты расположения и ширины и высот отличаются, будет выполнено растяжение или сжатие фрагмента изображения. Начало координат - верхний левый угол. Эта функция может быть использована, чтобы копировать области в пределах того же изображения (если dst_im и src_im совпадают), но если области перекрывают результаты быть непредсказуемым. Вместо неё можно использовать imagecopyresampled() - ресемплирование со сглаживанием. Картинка получится более качественной. Подробнее о параметрах функции можно узнать в документации на сайте http://php.net/imagecopyresized/ . Следующая часть кода совершенно необязательна. Она печатает произвольную надпись на готовой картинке. Причём, контрастным цветом: на тёмном фоне надпись будет белая, на светлом – чёрная. Сначала определим координаты вывода текста (в нашем примере это внизу справа) и три цвета – $white, $black и $gray с помощью функции imagecolorallocate. Чтобы определить, каким цветом печатать надпись, сравним цвет точки (функция imagecolorat), где будет надпись, со «средним» цветом $gray. Если цвет точки окажется светлее серого, то надпись будет чёрного цвета ($color = $black). Если цвет точки окажется темнее серого, то надпись будет белого цвета ($color = $white). Наконец определяем строку $str и наносим её функцией imagestring, указав размер шрифта, координаты, строку и цвет. Помните, что эта функция выводит только латинские символы одним шрифтом. Хотя никто не запрещает вам пользоваться TrueType шрифтами, благо такие функции есть.
Немного поясню конструкцию: round((max($w_src, $h_src) – min($w_src, $h_src)) / 2). Это выражение вычисляет координату x или y верхнего левого угла квадратного блока (без разницы для горизонтальной или вертикальной картинки). Это видно на рисунках. Обычно в горизонтальных картинках (лица, пейзажи, объекты) наиболее информативна центральная часть, а в вертикальных (чаще всего это стоящие люди) - наиболее важна верхняя часть. Чтобы изменить вырезаемый фрагмент вертикальной картинке, строку: imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); можно заменить на imagecopyresized($dest, $src, 0, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), $w, $w, min($w_src,$h_src), min($w_src,$h_src)); Тогда в вертикальной картинке будет браться не верхняя часть, а средняя (это зависит от расположения объектов на фотографии). Точно так же можно брать нижнюю часть или правую/левую часть горизонтальной картинки – поэкспериментируйте с координатами. Особенно этот метод пригодится, если нужно создать квадратные «превьюшки» (thumbnails) в одной таблице. В конце выводим картинку imagejpeg() и очищаем память imagedestroy(). Демонстрация масштабирования Чтобы вам не приходилось лихорадочно менять входные переменные в процессе отладки на локальном сервере, предлагаю демо-страничку, которая загружает четыре картинки разных форматов. Тестовые исходные картинки должны храниться в текущей директории под именами image1.jpg и image2.jpg. Здесь же должен находиться файл resize.php, который на выводе выдаёт jpeg-изображение. resize.htm
Этот скрипт достаточно прост, он всего лишь формирует страницу, ссылки, осуществляет всю навигацию по каталогу картинок. Вся работа по загрузке картинок производится через resize.php. Его можно взять за основу простого веб-альбома. preview.php
Почему не работает GD? Я отлаживаю скрипты в Windows, поэтому объясню решение проблемы именно для этой ОС. Скорее всего, причина неработоспособности скрипта в отсутствии модуля php_gd.dll (или более новый php_gd2.dll). Откройте директорию с интерпретатором PHP, создайте директорию extensions, если её нет. Найдите вышеуказанный модуль – он есть в полных дистрибутивах PHP. Пропишите в php. ini (лежит в c:\ windows) строчку extension = php_gd2.dll (а заодно и extension_dir = "c:\php\extensions\", если такой нет). Пути могут быть другими. После этого всё должно заработать. Не «смешивайте» модули php_gd.dll и php_gd2.dll – интерпретатор будет ругаться на дублирование функций в библиотеках. Заключение Вот такие интересные вещи можно сделать при помощи пары графических функций – зато какая экономия на изготовлении и хранении дублирующих картинок. Не PhotoShop конечно, но для массового применения это самое то. Картинок на сайте очень много, качественно их выводить необязательно, главное чтобы быстро и просто. Скрипт получился не очень универсальный, но с моей задачей он справляется прекрасно. Следует отметить тонкую разницу между функциями imagecopyresized и imagecopyresampled. Первая просто изменяет размер картинки без сглаживания, она работает быстро, но результат – большие искажения. Вторая функция – ресемплирование, изменение размеров со сглаживанием. Работает она намного медленнее, но картинка получается чистой, как в профессиональных графических пакетах. О ресемплировании можно почитать здесь. Выбирать способ следует исходя из ваших потребностей – быстрее или качественнее. Возможно, вы реализуете другие идеи: задавать произвольный размер x и y, наличие или отсутствие надписи, формат выходного файла, рисование рамочки, водяных знаков, подписи на картинке шрифтами TrueType, вывод картинки-заглушки в случае ошибки. Источник
1
|
|||||||||||||||||||||||||||||||||||||||||
|
Веб-мастер
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
|
||||||
| 07.05.2012, 19:54 | ||||||
|
][акер,
0
|
||||||
|
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
|
|
| 07.05.2012, 21:05 | |
|
0
|
|
|
Веб-мастер
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
|
|
| 07.05.2012, 21:19 | |
|
0
|
|
|
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
|
|
| 07.05.2012, 22:51 | |
|
The returned image type of the returned thumbnail. This is either TIFF or JPEG.
0
|
|
|
Веб-мастер
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
|
|
| 08.05.2012, 09:13 | |
|
0
|
|
| 08.05.2012, 10:29 | ||||||
1
|
||||||
| 08.05.2012, 10:29 | |
|
Помогаю со студенческими работами здесь
10
Как уменьшить размер картинки на пхп Как изменить размер текста в php? Как изменить разрешение картинки? [php-imagemagick] Как изменить размер изображения Как изменить размер анимации и создать скриншот темы оформления для телефонов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|