/** * Создаёт фон для картинки в соответвии с типом $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; } }
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; }