Библиотека
Дневники
Фотогалереи
Легкий форум
Архив
Поиск
Здравствуйте Гость (Вход|Регистрация)   
Студенческий форум
 
 


Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению ) Ответ в темуСоздание новой темыСоздание опроса

> PHP контрольные, курсовые, Выполнение контрольных, курсовых по РНР

дед_мажор
Быстрая цитата




Уважаемый крутой перец
Group Icon

Профиль
Группа: Декан
Сообщений: 2405
Регистрация: 11.11.2005
Репутация: 156

Место учебы: да


Мде, вот из-за таких пейсателей курсовиков, которые говорят, что знают пхп, но сами не могут отличить класс от массива, и происходит весь этот горький катаклизм, который мы с вами наблюдаем на ит-рынке и в высшем образовании.

афтар, я тоже не из орла. Кто тут про орел говорил? Я говорил лишь про то, что никаких денег вам, неграмотным разводилам, не положено, пока не будет примеров кода и текстов записки. Так что отдыхай.
PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


ок wink.gif
я конечно понимаю, что тут все умные, и знают РНР в идеале => просить меня сделать что-либо не будут, но всё же вот небольшой пример
скрипт, накладывающий водяной знак на картинки
convert.php :
Код

<?php
error_reporting(E_ALL);
$from = "from/";  //  Директория, откуда будем брать фотки
$to = "to/";          //  Директория, куда будем класть фотки
$watermark2 = "watermark.png";  // Картинка с водяным знаком
    include 'api.watermark.php';
    $watermark = new watermark();
$dir_pointer = opendir("$from");            
while (($res = readdir($dir_pointer))!==FALSE){
$path = $from . $res;
  if (is_file($path)){
        $main_img_obj = imagecreatefromjpeg($path);
        $watermark_img_obj = imagecreatefrompng($watermark2);
        $return_img_obj = $watermark->create_watermark($main_img_obj, $watermark_img_obj, 66);
        imagejpeg($return_img_obj, "$to$res", 50);  // пишем результат в каталог
  }
}
close($dir_pointer);  
?>
PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


[CODE]<?php
Error_Reporting(E_ALL);
class watermark{
function create_watermark( $main_img_obj, $watermark_img_obj, $alpha_level = 100 ){
$alpha_level/= 100;
# рассчет размеров изображения (ширина и высота)
$main_img_obj_w = imagesx( $main_img_obj );
$main_img_obj_h = imagesy( $main_img_obj );
$watermark_img_obj_w = imagesx( $watermark_img_obj );
$watermark_img_obj_h = imagesy( $watermark_img_obj );
# определение координат точки, где будет левый верхний угол водяного знака.
$main_img_obj_min_x = floor( ( $main_img_obj_w ) - ( $watermark_img_obj_w ) );
$main_img_obj_max_x = ceil ( $main_img_obj_w );
$main_img_obj_min_y = floor( ( $main_img_obj_h ) - ( $watermark_img_obj_h ));
$main_img_obj_max_y = ceil ( $main_img_obj_h );
# создание нового изображения
$return_img = imagecreatetruecolor( $main_img_obj_w, $main_img_obj_h );

for( $y = 0; $y < $main_img_obj_h; $y++ ){ # проходим всё изображение
for( $x = 0; $x < $main_img_obj_w; $x++ ){
$return_color = NULL;
# определение истинного расположения пикселя в пределах нашего водяного знака
$watermark_x = $x - $main_img_obj_min_x;
$watermark_y = $y - $main_img_obj_min_y;
# выбор информации о цвете для наших изображений
$main_rgb = imagecolorsforindex( $main_img_obj, imagecolorat( $main_img_obj, $x, $y ) );
# если пиксель водяного знака непрозрачный
if ( $watermark_x >= 0 && $watermark_x <
PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


ммда, вот написал, а теперь подумал: сейчас же начнутся коментарии типа "ты это в нете спёр", "ты наверно 2 года над этим трудился?", "а где же вывод ошибок?", "а если там не только jpg?" и т.д.....
PMПисьмо на e-mail пользователю
Top
michael
Быстрая цитата




Уважаемый карабас-барабас
Group Icon

Профиль
Группа: Декан
Сообщений: 1714
Регистрация: 12.05.2005
Репутация: 164

Место учебы: /usr/share/man


вообще-то для исходников есть спецтэг code
Код
<? phpinfo(); ?>
PMСайт пользователяICQ
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


michael, поправил
PMПисьмо на e-mail пользователю
Top
michael
Быстрая цитата




Уважаемый карабас-барабас
Group Icon

Профиль
Группа: Декан
Сообщений: 1714
Регистрация: 12.05.2005
Репутация: 164

Место учебы: /usr/share/man


Цитата
поправил


править лучше оба сообщения, потому что в первом сообщении тег [code] не закрылся
PMСайт пользователяICQ
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


michael, поправил. из-за тега сообщение не вмещалось, убрал коментарии
PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


блин, либо кто-то издевается, либо глюки на форуме. теперь у второго не закрыт, причём сообщение обрезано на половину
PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


api.watermark.php разделил на 3.

part 1:

Код

<?php
Error_Reporting(E_ALL);

class watermark{

# функция, которая сливает два исходных изображения в одно
function create_watermark( $main_img_obj, $watermark_img_obj, $alpha_level = 100 ){
   $alpha_level/= 100;  # перевод значения прозрачности альфа-канала из % в десятки

# рассчет размеров изображения (ширина и высота)
   $main_img_obj_w        = imagesx( $main_img_obj );
   $main_img_obj_h        = imagesy( $main_img_obj );
   $watermark_img_obj_w   = imagesx( $watermark_img_obj );
   $watermark_img_obj_h   = imagesy( $watermark_img_obj );

# определение координат точки, где будет левый верхний угол водяного знака.
# водяной знак располагается в правом нижнем углу
   $main_img_obj_min_x   = floor( ( $main_img_obj_w ) - ( $watermark_img_obj_w ) );
   $main_img_obj_max_x   = ceil ( $main_img_obj_w );

   $main_img_obj_min_y   = floor( ( $main_img_obj_h ) - ( $watermark_img_obj_h ));
   $main_img_obj_max_y   = ceil ( $main_img_obj_h );

# создание нового изображения
 $return_img = imagecreatetruecolor( $main_img_obj_w, $main_img_obj_h );


PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


2

Код

for( $y = 0; $y < $main_img_obj_h; $y++ ){  # проходим всё изображение
   for( $x = 0; $x < $main_img_obj_w; $x++ ){
 
      $return_color = NULL;
# определение истинного расположения пикселя в пределах нашего водяного знака
      $watermark_x = $x - $main_img_obj_min_x;
      $watermark_y = $y - $main_img_obj_min_y;
# выбор информации о цвете для наших изображений    
   $main_rgb = imagecolorsforindex( $main_img_obj, imagecolorat( $main_img_obj, $x, $y ) );
# если пиксель водяного знака непрозрачный
      if ( $watermark_x >= 0 && $watermark_x < $watermark_img_obj_w &&
           $watermark_y >= 0 && $watermark_y < $watermark_img_obj_h ) {
           
           $watermark_rbg = imagecolorsforindex( $watermark_img_obj, imagecolorat( $watermark_img_obj, $watermark_x, $watermark_y ) );

# использование значения прозрачности альфа-канала
      $watermark_alpha = round( ( ( 127 - $watermark_rbg['alpha'] ) / 127 ), 2 );
      $watermark_alpha = $watermark_alpha * $alpha_level;

# расчет цвета в месте наложения картинок

      $avg_red = $this->_get_ave_color( $main_rgb['red'], $watermark_rbg['red'], $watermark_alpha );
      $avg_green = $this->_get_ave_color( $main_rgb['green'], $watermark_rbg['green'],        $watermark_alpha );
     $avg_blue = $this->_get_ave_color( $main_rgb['blue'], $watermark_rbg['blue'],                $watermark_alpha );
PMПисьмо на e-mail пользователю
Top
dima11
Быстрая цитата




Абитуриент
*

Профиль
Группа: Пользователи
Сообщений: 13
Регистрация: 20.10.2007
Репутация: нет

Место учебы: ОГУ


3:

Код

# используя полученные данные, вычисляем индекс цвета  
      $return_color = $this->_get_image_color( $return_img, $avg_red, $avg_green, $avg_blue );
      } else {  # если же не получиться выбрать цвет, то просто возьмем копию исходного пикселя
     $return_color = imagecolorat( $main_img_obj, $x, $y );
        }



# из полученных пикселей рисуем новое изоборажение
   imagesetpixel( $return_img, $x, $y, $return_color );
    }
  }
               return $return_img;
       }

# функция для "усреднения" цветов изображений
   function _get_ave_color( $color_a, $color_b, $alpha_level ) {
      return round( ( ( $color_a * ( 1 - $alpha_level ) ) + ( $color_b * $alpha_level ) ) );
       }

# функция, которая находит ближайшие RGB-цвета для нового изображения
       function _get_image_color($im, $r, $g, $b) {
               $c=imagecolorexact($im, $r, $g, $b);
               if ($c!=-1) return $c;
               $c=imagecolorallocate($im, $r, $g, $b);
               if ($c!=-1) return $c;
               return imagecolorclosest($im, $r, $g, $b);
       }
}
?>
PMПисьмо на e-mail пользователю
Top
дед_мажор
Быстрая цитата




Уважаемый крутой перец
Group Icon

Профиль
Группа: Декан
Сообщений: 2405
Регистрация: 11.11.2005
Репутация: 156

Место учебы: да


ZOMG!!!111!!!адынадын

процедурное программирование — наше все!

Код
class watermark{

от класса одно название. и область видимости методов класса пушкен указывать будет?

Код
$watermark = new watermark();

у объекта нет состояния. watermark - это не класс, а статическая помойка для статических функций, точнее даже для одной длинной функции, которая делает все-все-все. если тебе вдруг понадобится в будущем накладывать водяной знак, например, на видео или анимированный gif покадрово — то ты все будешь писать с нуля, потому что коэффцициент реюзабельности этого кода равен нулю.

Код
# рассчет размеров изображения (ширина и высота)

никакого отношения к классу watermark не имеет. впрочем, как и многие другие куски портянки, помеченные бесполезными, беспомощными и бессмысленными комментариями.

знания ООП — два.
написание нечитаемого и нереюзабельного кода — оценка отлично.
PMПисьмо на e-mail пользователю
Top
RoDen
Быстрая цитата




Уважаемый Председатель ученого совета
Group Icon

Профиль
Группа: Серый кардинал
Сообщений: 3285
Регистрация: 10.03.2005
Репутация: 248

Место учебы: политех


дед_мажор
я с наскучившим уже вопросом, наверно: покажешь парню как надо? rolleyes.gif
PM
Top
дед_мажор
Быстрая цитата




Уважаемый крутой перец
Group Icon

Профиль
Группа: Декан
Сообщений: 2405
Регистрация: 11.11.2005
Репутация: 156

Место учебы: да


RoDen
ты невнимателен =) ссылка висела у меня в подписи несколько месяцев ) а по ссылкам, которые были внутри -- открытый, бесплатный код, который юзается довольно значительной частью рунета )
PMПисьмо на e-mail пользователю
Top
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
 
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:o  :D  :rolleyes:  :cry2: 
:unsure:  :cry:  :angry:  :bleh: 
:dev:  :flowers:  :fool:  :old: 
:shook:  :angel:  :wor:  :rotfl: 
:kov:  :chair:  :friends:  :wub: 
       
Показать всё


 
Опции сообщения  Включить смайлики?
 Включить подпись?
 Использовать AJAX?

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса

 

Студенческий клуб ostudent.ru и его создатели не несут ответственности за достоверность самостоятельно размещаемой посетителями сайта информации и не могут подтвердить или опровергнуть её.

Этот сайт защищен «Site Guard»