Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2009, 22:22   #1
InCun
Пользователь
 
Аватар для InCun
 
Регистрация: 11.04.2009
Сообщений: 64
Вопрос Изменение размера картинок методом php

Объясните ламеру как оно работает?

последовательность такая:
1. html страница с upload
2. После загрузки картинки, размер уменьшается сам (сохраняя пропорции)
3. Сохраняет файл на сервер..
4. И сохраняет данные в мускуле о том, что такая то картинка есть..
InCun вне форума Ответить с цитированием
Старый 28.04.2009, 22:41   #2
Gongled
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 78
По умолчанию

1. HTML-форма, ссылающаяся на обработчик upload.php
Код HTML:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" size="40" name="fileupload"> 
<input type="submit" value="Загрузить">
</form>
2. Скрипт-обработчик.
Для изменения размеров изображения можно использовать функцию imagecopyresized(). Скажу честно, ни разу не пользовался.
PHP код:
# Подключение в базе данных и.т.п.

define('ROOT_DIR'"");
define('UPLOAD_DIR'"/uploads");

# Если не существует
if (!file_exists(GetCWD()."".UPLOAD_DIR."/".$_FILES['fileupload']['name']))
{
# Если не загружен до конца
    
if (!is_uploaded_file($_FILES['fileupload']['tmp_name']))
    {
        echo 
"Не загружен";
    }
                    
    
# Если загружен
    
else
    {
        
# Если не удалось скопировать
        
if (@!copy($_FILES['fileupload']['tmp_name'],GetCWD()."".UPLOAD_DIR."/".$_FILES['fileupload']['name']))
        {
            echo 
"Не удалось скопировать файл в директорию";
        }
            
        
# Файл успешно загружен
        
else
        {
            
$file_name $_FILES['fileupload']['name'];
            
            
// Редирект
            
header("Location: "ROOT_DIR ."/upload.php");
        }
    }    
}
else
{
# Файл существует
echo "Этот файл уже был загружен";

3. Пример SQL-запроса:
PHP код:
// Подключение к базе данных

$insert_attach "INSERT INTO `attachments` (id, file_name) VALUES ('','$file_name')";
$result_attach $db -> query ($insert_attach); 
Если где-то допущены ошибки — просьба сообщить. Мог что-то пропустить.
Пишу глупости.

Последний раз редактировалось Gongled; 28.04.2009 в 22:43. Причина: Добавил немного комментариев
Gongled вне форума Ответить с цитированием
Старый 29.04.2009, 09:33   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Последовательность немного другая.... 3 потом 2.... то есть на сервер по любому сначала загрузится исходное изображение... а потом уменьшайте размер...


вот кусок из работающего ...когда.... думаю разберетесь
PHP код:

 $rgb
=0xF5F9FD$quality=75;
 
$size getimagesize($src);

  
$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];
  
$ratio       max($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  floor(($width $new_width) / 2);
  
$new_top     = !$use_x_ratio floor(($height $new_height) / 2);

  
$isrc $icfunc($src);
  
$idest imagecreatetruecolor($width$height);
  
imagefill($idest00$rgb);
  
imagecopyresampled($idest$isrc$new_left$new_top00
  
$new_width$new_height$size[0], $size[1]);
  
imagejpeg($idest,$new_filename,$quality);

  
imagedestroy($isrc);
  
imagedestroy($idest); 
ADSoft вне форума Ответить с цитированием
Старый 22.10.2009, 16:18   #4
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

Проблема следующая. Не могу вывести уменьшенное изображение в середине страницы посредством функции
PHP код:
$imagesmall imagecreatetruecolor(150,100);
imagejpeg($imagesmall); 
по идее должно вывести просто черный прямоугольник размером 150х100 пикселей. Но перед этим нужно указать тип выводимиого, тоесть:

PHP код:
header("Content-type: image/jpeg"); 
но заголовки как известно выодятся в самом начале страницы, до вывода какой либо информации. Если вообще не выводить вышеупомянутый заголовок, то в месте вывода изображения получается абракадабра текстовая (вроже так и должно быть). Если же я этот заголовок ставлю в положенное место (начало страницы), то выдает ошибку: Изображение "http://10.5.0.33:8300/gallery/gallery.php" не может быть отображено, так как содержить ошибки. В чем проблема?? Что еще и куда нужно добавить/изменить??

Это "текстовый вариант" рисунка:

яШяа�JFIF������яю�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality яЫ�C� $.' ",#(7),01444'9=82<.342яЫ�C 2!!22222222222222222222222222222222 222222222222222222яА��d�–"�яД������ ����� яД�µ���}�!1AQa"q2Ѓ‘Ў#B±БRСр$3br ‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefgh ijstuvwxyzѓ„…†‡€‰Љ’“”•–—�™љўЈ¤Ґ¦§Ё© ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪбвгдежз ийкстуфхцчшщъяД�������� яД�µ��w�!1AQaq"2ЃB‘Ў±Б #3RрbrС $4б%с&'()*56789:CDEFGHIJSTUVWXYZcde fghijstuvwxyz‚ѓ„…†‡€‰Љ’“”•–—�™љўЈ¤Ґ ¦§Ё©ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪвгд ежзийктуфхцчшщъяЪ���?�щюЉ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( яЩ

Или все-таки проще вновь созданный рисунок сохранить на диск, а потом просто его через тэг <img> отобразить??
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo

Последний раз редактировалось regman; 22.10.2009 в 16:28.
regman вне форума Ответить с цитированием
Старый 22.10.2009, 19:45   #5
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

браузер не понимает бинарных данных посреди html-кода

на странице (в стилях) должен быть путь к изображению, а не содержимое файла
свободен...
wall66 вне форума Ответить с цитированием
Старый 22.10.2009, 20:08   #6
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

regman, текстовый вариант рисунка другой, просто текстовый процессор не может его отобразить в верном виде.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 23.10.2009, 09:13   #7
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

да я в принципе так и сделал - сохранил измененное изображение на диск, а потом просто вывел черег тэг <img>. Просто с толку сбила функция imagejpeg библиотеки GDLib, надеялся что можно будет вывести в браузер без сохранения на диск...
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 23.10.2009, 11:21   #8
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Цитата:
Сообщение от regman Посмотреть сообщение
да я в принципе так и сделал - сохранил измененное изображение на диск, а потом просто вывел черег тэг <img>. Просто с толку сбила функция imagejpeg библиотеки GDLib, надеялся что можно будет вывести в браузер без сохранения на диск...
в принципе можно.... пишете отдельно скрипт php - в нем
header(....)
тут выводим картинку...
а в основной странице вызов <img src="sript.php?тут могут быть параметры">
и будет вам счастие
ADSoft вне форума Ответить с цитированием
Старый 23.10.2009, 13:59   #9
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

Спасибо. Сделал
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 26.10.2009, 10:21   #10
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

только теперь возникла другая проблема. Есть ячейка таблицы, куда вставляется рисунок скриптом, который так же записывал в массив сессий некоторое значение. В следующей ячейке выводилось это значение, только почему-то предыдущее. Вот часть кода (это файл вложение, через include):

PHP код:
<table class="randomfototable">
<tr><td class="smallheader">фото</td></tr>
<tr><td><img class="randomfoto" src="randomfoto.php" width="150" height="100" align="middle"></td></tr>
<tr><td class="actiondate"><?php echo $_SESSION['info'?></td></tr>
</table>
есть строка:

PHP код:
<?php echo $_SESSION['info'?>
в скрипте randomfoto.php это значение записывается функцией RandFotoFromGallery();

PHP код:
<?php
    
include ("../config.php");
    
header("Content-type: image/jpeg");      
    
RandFotoFromGallery();
?>
часть кода функции RandFotoFromGallery();

PHP код:
......................
$_SESSION['info'] = fread($f,1000);
....................... 
Вопрос следующий. Разве сначала выводится значение $_SESSION['info'] в ячейке таблицы прежде чем оно запишется скриптом randomfoto.php??
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Качественное изменение размера изображения... Dr. MefistO Мультимедиа в Delphi 5 15.07.2009 17:22
Изменение размера окна Anfall Общие вопросы Delphi 5 14.03.2009 10:06
Вопрос по C++ Builder (изменение размера StringGrid) Sad_SmiliK Помощь студентам 2 11.03.2009 18:20
Изменение размера шрифта Nando Microsoft Office Excel 4 07.03.2009 16:45
Изменение размера картинки Борис Низов PHP 6 09.12.2007 16:26