Ejemplo n.º 1
0
 /**
  * Создаёт фон для картинки в соответвии с типом $type
  * Типы: 1, 2, 3, 4, 5 или путь к картинке фона
  * $color - цвет, который используется для рисования линий типов 2-5
  * $plotnost и $interval используются только для создания фона случайны пикселей тип 1
  */
 function dynamic_bg($type, $color = '000000', $plotnost = 0.5, $interval = 10)
 {
     if ($type == null || $type == 0) {
         return;
     }
     $color1 = $this->create_color($color);
     $color2 = $this->create_color('AAAAAA');
     $w = $this->width;
     $h = $this->height;
     switch ($type) {
         // из файла
         case file_exists($type):
             $file = $type;
             $bgFile = new ImageUtils();
             $bgFile->open($type);
             $im1 = $bgFile->im;
             $size_x = imagesx($im1);
             $size_y = imagesy($im1);
             $rows = floor($h / $size_y);
             $steps = floor($w / $size_x);
             for ($i = 0; $i < $h; $i += $size_y) {
                 for ($j = 0; $j < $w; $j += $size_x) {
                     imagecopy($this->im, $im1, $j, $i, 0, 0, $size_x, $size_y);
                 }
             }
             break;
             // случайные пиксели
         // случайные пиксели
         case 1:
             $plotnost > 1 || $plotnost <= 0 ? $plotnost = 0.5 : false;
             $randsteps = range(0, $w);
             for ($i = 0; $i < $h; $i++) {
                 $randsteps_mix = array_rand_values($randsteps, round(sizeof($randsteps) * $plotnost));
                 foreach ($randsteps_mix as $v) {
                     imagesetpixel($this->im, $v, $i, $color1);
                 }
             }
             break;
             // клетки
         // клетки
         case 2:
             for ($i = 0; $i < $h; $i += $interval) {
                 imageline($this->im, 0, $i, $w, $i, $color1);
             }
             for ($i = 0; $i < $w; $i += $interval) {
                 imageline($this->im, $i, 0, $i, $h, $color1);
             }
             break;
             // сетка
         // сетка
         case 3:
             $k = $w / $h;
             for ($i = 0; $i < $h; $i += $interval) {
                 imageline($this->im, 0, $i, $w, $i, $color1);
                 imageline($this->im, $i * $k, 0, $i * $k, $h, $color2);
                 //imageline($this->im, 0, $i, $w, $w - $i, $color1);
             }
             break;
             // ещё что-то
         // ещё что-то
         case 4:
             for ($i = 0; $i < $h; $i += $interval) {
                 imageline($this->im, 0, $i, $w, $h - $i, $color1);
             }
             for ($i = 0; $i <= $h; $i += $interval) {
                 imageline($this->im, $i, 0, $w - $i, $h, $color1);
             }
             break;
             // диагонали
         // диагонали
         case 5:
             for ($i = 0; $i < $h; $i += $interval) {
                 imageline($this->im, 0, $i, $w, $h + $i, $color1);
             }
             for ($i = 0; $i < $h; $i += $interval) {
                 imageline($this->im, $i, 0, $w + $i, $h, $color1);
             }
             break;
             // огород арбузов
         // огород арбузов
         case 6:
             $radius = 10;
             for ($i = $margin; $i < $h; $i += $interval) {
                 for ($j = $margin; $j < $w; $j += $interval) {
                     imageellipse($this->im, $j, $i, $radius, $radius, $color1);
                 }
             }
             break;
             // рандом кружки
         // рандом кружки
         case 20:
         case 21:
         case 22:
         case 23:
         case 24:
         case 25:
         case 26:
         case 27:
         case 28:
         case 29:
             for ($i = 0; $i < $h; $i += $interval) {
                 switch ($type) {
                     case 20:
                         imageellipse($this->im, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $color1);
                         break;
                     case 21:
                         imageellipse($this->im, $w / 2 - ($i - round($i / 100) * 100), $i, 10, 10, $color1);
                         break;
                     case 28:
                         imageellipse($this->im, rand($w / 2 - 10, $w / 2 + 10), $i, 10, 10, $color1);
                         break;
                     case 29:
                         imageellipse($this->im, rand(0, $w), rand(0, $h), rand(0, $i), rand(0, $i), $color1);
                         break;
                 }
             }
             break;
             // рандом полоски
         // рандом полоски
         case 7:
             for ($i = 0; $i < $h; $i += $interval) {
                 imageline($this->im, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $color1);
                 //imageline($this->im,   0, $i,      rand(0, $i), rand(0, $i),    $color1);
             }
             break;
             // квадратики из центра
         // квадратики из центра
         case 8:
             $k = $w / $h;
             for ($i = 0; $i < $h; $i += $interval) {
                 $sizeW = 10 * $k + $i;
                 $sizeH = 10 + $i;
                 $x1 = $w / 2 - $sizeW / 2;
                 $y1 = $h / 2 - $sizeH / 2;
                 $x2 = $w / 2 + $sizeW / 2;
                 $y2 = $h / 2 + $sizeH / 2;
                 imagerectangle($this->im, $x1, $y1, $x2, $y2, $color1);
             }
             break;
             // паутина
         // паутина
         case 9:
             for ($i = -$h; $i < $h; $i += $interval) {
                 imageline($this->im, 0, $i, $w - $i, $h + $i, $color1);
             }
             for ($i = -$h; $i < $h; $i += $interval) {
                 imageline($this->im, 0, $i, $h - $i, $w + $i, $color1);
             }
             break;
     }
 }
Ejemplo n.º 2
0
 public function resizeImage()
 {
     if ($this->getFileType() != self::FILE_IMAGE) {
         return false;
     }
     // узнаем ширину и высоту
     $w = self::$_maxWidth;
     $h = self::$_maxHeight;
     if (!self::$_initSize) {
         $w = Yii::app()->params['upload_image_width'];
         $h = Yii::app()->params['upload_image_height'];
         if ($w == null || !is_numeric($w) || $w < 0) {
             $w = 0;
         }
         if ($h == null || !is_numeric($h) || $h < 0) {
             $h = 0;
         }
         self::$_maxWidth = intval($w);
         self::$_maxHeight = intval($h);
         self::$_initSize = true;
     }
     if ($w == 0 && $h == 0) {
         return false;
     }
     $path = $this->getFilePath(true);
     if ($path == null || !file_exists($path)) {
         return false;
     }
     // если размеры меньше
     $img = new ImageUtils();
     $a = $img->info($path);
     if ($a['width'] <= $w) {
         $w = 0;
     }
     if ($a['height'] <= $h) {
         $h = 0;
     }
     if ($w == 0 && $h == 0) {
         return false;
     }
     if (!$img->open($path)) {
         return false;
     }
     // определяем по ширине или высоте делать ресайз:
     $newW = $w;
     $newH = $h;
     if ($w == 0 && $h != 0) {
         $newW = round($h * $img->width / $img->height);
     } else {
         if ($h == 0 && $w != 0) {
             $newH = round($w * $img->height / $img->width);
         } else {
             $tmpH = round($w * $img->height / $img->width);
             if ($tmpH > $h) {
                 $newW = round($h * $img->width / $img->height);
             } else {
                 $newH = round($w * $img->height / $img->width);
             }
         }
     }
     $img->resize($newW, $newH);
     $img->save($path, 94);
     return true;
 }