Помощник
|
Загрузка картинки с последющим тройным изменением размера |
lesli007
|
Сообщение
#1
|
||
|
|
||
|
|||
sc2r2bey |
20.3.2011, 17:28;
Ответить: sc2r2bey
Сообщение
#2
|
|
навскидку, можно взять либо обработанную фотку, либо временную и проделать похожую манипуляцию, задав другой размер и путь(и не забудь убрать удаление временного файла, пока не совершил все манипуляции, а вообще сейчас автоматом они удаляются).
зы то что ты предложил не совсем оптимально для подобных задач. -------------------- программирую web и для we |
|
|
lesli007
|
Сообщение
#3
|
|
Помогите пожалуйста, можно поподробнее?
|
|
|
sc2r2bey |
21.3.2011, 22:03;
Ответить: sc2r2bey
Сообщение
#4
|
|
я немного по-другому делаю, могу свое решение предложить
-------------------- программирую web и для we |
|
|
lesli007
|
Сообщение
#5
|
|
было бы замечательно
|
|
|
ZiTosS |
22.3.2011, 18:52;
Ответить: ZiTosS
Сообщение
#6
|
|
lesli007, Первым делом я бы оптимизировал функцию и добавил в неё параметры:
[php]/** * * $file - массив с данными (именем файла, временным именем файла, типом и т.д.) * $dim_resize - размер, до которого будем изменять изображение (увеличивать или уменьшать) * $side - на какую из сторон будем смотреть - ширина ("w") или высота "h" * $save_file - имя файла с расширением, под которым хотим сохранить картинку * $rotate - поворот картинки * $quality - качество выходной картинки (для привьюшек можно и поменьше от 1 до 100) * */ function resize($file, $dim_resize, $side = "w", $save_file="", $rotate = null, $quality = null) { // Если указано имя для сохранения, то изменяем стандартное $file['name'] = ( $save_file != "" ) ? $save_file : $file['name']; // Качество изображения по умолчанию if ($quality == null) $quality = 75; // Cоздаём исходное изображение на основе исходного файла if ($file['type'] == 'image/jpeg') $source = imagecreatefromjpeg($file['tmp_name']); elseif ($file['type'] == 'image/png') $source = imagecreatefrompng($file['tmp_name']); elseif ($file['type'] == 'image/gif') $source = imagecreatefromgif($file['tmp_name']); else return false; // Поворачиваем изображение $src = ( $rotate != null ) ? imagerotate($source, $rotate, 0) : $source; // Определяем ширину и высоту изображения $w_src = imagesx($src); $h_src = imagesy($src); // определяем коэффициент сжатия/растяжения $ratio = ( $side == "w" ) ? $w_src / $dim_resize : $h_src / $dim_resize; $w_dest = round($w_src/$ratio); $h_dest = round($h_src/$ratio); // Создаём пустую картинку $dest = imagecreatetruecolor($w_dest, $h_dest); // Копируем старое изображение в новое с изменением параметров imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src); // Вывод картинки и очистка памяти imagejpeg($dest, $file['path_save'].$file['name'], $quality); imagedestroy($dest); imagedestroy($src); return $file['path_save'].$file['name']; }[/php] А теперь по использованию функции: [php]// Пути загрузки файлов $path = 'i/'; $tmp_path = 'tmp/'; // Массив допустимых значений типа файла $types = array('image/gif', 'image/png', 'image/jpeg'); // Максимальный размер файла $size = 1024000; // Обработка запроса if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Проверяем тип файла if (!in_array($_FILES['picture']['type'], $types)) die('<p>Запрещённый тип файла. <a href="?">Попробовать другой файл?</a></p>'); // Проверяем размер файла if ($_FILES['picture']['size'] > $size) die('<p>Слишком большой размер файла. <a href="?">Попробовать другой файл?</a></p>'); $file = $_FILES['picture']; // копируем параметры картинки в переменную $file $file['save_patch'] = $tmp_path; // добавляем к ним путь для сохранения resize-картинок $files_resized = array(); // здесь будут храниться путь+имя resize-файлов // сжимаем/увеличиваем по ширине картинку до 300px, высота - по пропорциям $files_resized[] = resize($file, 300, "w", "file1_300w.jpg", $_POST['file_rotate']); // сжимаем/увеличиваем по высоте картинку до 60px, ширина - по пропорциям $files_resized[] = resize($file, 60, "h", "file2_60h.jpg", $_POST['file_rotate']); // сжимаем/увеличиваем по ширине картинку до 500px, высота - по пропорциям $files_resized[] = resize($file, 500, "w", "file3_500w.jpg", $_POST['file_rotate']); // Удаляем временный файл загруженного оригинала unlink($tmp_path . $file['tmp_name']); }[/php] Конечно в коде много недочетов(таких как сохранение любой картинки с заголовками JPG) и функция не универсальная(Имя файла приходится указывать самому, притом расширение картинки лучше определить). Также из кода убрал пересохранение файла во временный каталог, определение переменной $tmp_path глобальной, копирование картинки после ресайза. Конечно при таком коде нет уверенности, что файл сохранится по назначению (прав хватит ли). Но не стал заморачиваться, кому надо, тот доработает и с расширениями, и с копированием, и с именами так как ему нужно будет. Поблагодарили: (0) |
|
|
lesli007
|
Сообщение
#7
|
|
вижу что внизу несколько картинок создаются - придумать лишь параметры. огромное спасибо Вам! Подскажите только, эти 2 кода друг за другом поставить?
|
|
|
ZiTosS |
23.3.2011, 19:23;
Ответить: ZiTosS
Сообщение
#8
|
|
lesli007,
1) Сначала определяем функцию. Не надо делать как у вас было ранее... определение функции было засунуто в условный блок. 2) код собираем, полный формат приводить не буду, опишу первую (определение функции) мою вставку кода как Код 1, а вторую - Код 2 <?php Код 1 Код 2 ?> 3) В общем случае, PHP хоть и интерпретируемый язык, но он не привередлив к месту определения функции, и если вы поменяете местами два этих куска кода и функция будет объявляться позже, чем вы её используете, PHP всё проглотит и обработает. Удачи вам. |
|
|
lesli007
|
Сообщение
#9
|
|
Подскажите пожалуйста! Я пытаюсь сделать в одной картинок ширину 2056. Если ее делаю то ничего не происходит.
При проверке на ошибки Allowed memory size of 33554432 bytes exhausted (tried to allocate 8400 bytes). Как изменить уровень доступной памяти? |
|
|
sc2r2bey |
23.3.2011, 22:18;
Ответить: sc2r2bey
Сообщение
#10
|
|
как вы делаете?
-------------------- программирую web и для we |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Кто и зачем покупает картинки обезьян по $200 тысяч? NFT |
167 | metvekot | 27096 | 6.3.2024, 21:58 автор: Boymaster |
|
BuxarVideoUploader - Автоматическое скачивание и загрузка видео из любых/ на любые видео хостинги (YouTube, TikTok, Instagram, Facebook, Яндекс Дзен, Вконтакте, Одноклассники, Rutube, Dailymotion, d.tube, Telegram и т.д. | 0 | BuxarNET | 1194 | 19.7.2023, 5:58 автор: BuxarNET |
|
Выравнивание картинки по центру между текстом | 10 | NikN | 2630 | 6.1.2021, 23:24 автор: buypushplatform |
|
Нужно добавить картинки на сайт И видео |
2 | Ksardas777 | 4078 | 17.11.2018, 10:41 автор: Intuit89 |
|
Загрузка фотографий на сайте. | 8 | Napoleon-007 | 1718 | 5.3.2018, 10:51 автор: Evgeniy3200 |
Текстовая версия | Сейчас: 28.3.2024, 18:04 |