/** * Создаёт уменьшенную копию изображения. * @param $SrcFileName Исходный файл. * @param string $DstFileName Имя файла для сохранения уменьшенной копии. * @param int $MaxWidth Максимальная ширина уменьшенной копии. * @param int $MaxHeight Максимальная высота уменьшенной копии. * @param bool $Stretch Растягивать ли картинку если заданные размеры больше исходных. * @param null $SaveFormat Формат сохранения миниатюры (jpeg, png, gif, wbmp). * @return \TPicture */ function CreateThumb($SrcFileName, $DstFileName = '', $MaxWidth = 0, $MaxHeight = 0, $Stretch = false, $SaveFormat = null) { $thumb = new TPicture($SrcFileName); if ($DstFileName == '') { return $thumb; } elseif (is_file($DstFileName)) { unlink($DstFileName); } if ($Stretch || ($MaxWidth > 0 || $MaxHeight > 0) && ($thumb->Width > $MaxWidth || $thumb->Height > $MaxHeight)) { $thumb->SetImageSize($MaxWidth, $MaxHeight); } $thumb->SaveToFile($DstFileName, $SaveFormat); return $thumb; }
for ($i = 0; $i < $num_chars; ++$i) { $c = $code[$i]; $x = $char_width * $c + $c + 1; $posx = rand($pole_wid * $i + 1, $pole_wid * $i + $pole_wid - $char_width - 1) + rand(-1, 1); if ($posx < 0) { $posx = 0; } elseif ($posx > $captcha->Width - $char_width) { $posx = $captcha->Width - $char_width; } $posy = rand(3, $captcha->Height - $char_height - 3); $captcha->Copy($font, $x, 1, 10, $char_height, $posx, $posy); } // Рисуем капчу $result_image->Draw($captcha->gd, ($result_width - $captcha_width) / 2, 5); // Искажение $result_MultiWave = new TPicture(); $result_MultiWave->NewPicture($result_width, $captcha_height, IMAGE_PNG); imagealphablending($result_MultiWave->gd, true); imagecolortransparent($result_MultiWave->gd, 0xeeeeee); imagefilledrectangle($result_MultiWave->gd, 0, 0, $result_width - 1, $captcha_height - 1, 0xeeeeee); // случайные параметры (можно поэкспериментировать с коэффициентами): // частоты $rand1 = mt_rand(700000, 1000000) / 15000000; $rand2 = mt_rand(700000, 1000000) / 15000000; $rand3 = mt_rand(700000, 1000000) / 15000000; $rand4 = mt_rand(700000, 1000000) / 15000000; // фазы $rand5 = mt_rand(0, 3141592) / 1000000; $rand6 = mt_rand(0, 3141592) / 1000000; $rand7 = mt_rand(0, 3141592) / 1000000; $rand8 = mt_rand(0, 3141592) / 1000000;
function AdminGalleryImageRotate() { global $GalleryDir, $ThumbsDir; $turn = $_GET['turn']; $id = SafeEnv($_GET['id'], 11, int); $angle = 0; if ($turn == 'left') { $angle = 90; } else { $angle = 270; } System::database()->Select('gallery', "`id`='{$id}'"); $img = System::database()->FetchRow(); $file_name = $img['file']; $file = $GalleryDir . $file_name; $thumb = $ThumbsDir . $file_name; // Поворачиваем изображение $pic = new TPicture($file); $pic->Rotate($angle); $pic->SaveToFile($file); // Обновляем эскиз if (is_file($thumb)) { unlink($thumb); } CreateThumb($file, $thumb, System::config('gallery/thumb_max_width'), System::config('gallery/thumb_max_height')); Audit('Фотогалерея: Поворот изображения ' . ($turn == 'left' ? 'влево' : 'вправо') . ' "' . $img['title'] . '" (id: ' . $img['id'] . ')'); $back = new Url(GetRefererUrl($_REQUEST['back'])); $back['update'] = SafeDB($_GET['id'], 11, int); // Добавляем / изменяем параметр update GO($back); }
function AdminUserSaveAvatar() { $alloy_mime = array('image/gif' => '.gif', 'image/jpeg' => '.jpg', 'image/pjpeg' => '.jpg', 'image/png' => '.png', 'image/x-png' => '.png'); include_once System::config('inc_dir') . 'picture.class.php'; $asize = getimagesize($_FILES['avatar']['tmp_name']); $alloy_mime = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png'); $alloy_exts = array('.gif', '.jpg', '.jpeg', '.png'); if (in_array($_FILES['avatar']['type'], $alloy_mime) && in_array(strtolower(GetFileExt($_FILES['avatar']['name'])), $alloy_exts)) { $NewName = $_FILES['avatar']['name']; if ($asize[0] > System::config('user/max_avatar_width') || $asize[1] > System::config('user/max_avatar_height')) { $thumb = new TPicture($_FILES['avatar']['tmp_name']); $thumb->SetImageSize(System::config('user/max_avatar_width'), System::config('user/max_avatar_height')); $thumb->SaveToFile(System::config('general/avatars_dir') . $NewName); } else { copy($_FILES['avatar']['tmp_name'], System::config('general/avatars_dir') . $NewName); } Audit('Пользователи: Добавление аватара в галерею аватар "' . $NewName . '"'); } else { System::admin()->AddCenterBox('Загрузка аватара'); System::admin()->HighlightError('Неправильный формат аватара. Ваш аватар должен быть формата GIF, JPEG или PNG.<br /><a href="javascript:history.go(-1)">Назад в галерею</a>'); } GO(ADMIN_FILE . '?exe=user&a=avatars'); }
/** * Добавляет водяной знак на изображение * @param $place * @param int $transparency */ public function AddWatermark($place, $transparency = 50) { $wm = new TPicture($this->WatermarkFile); if ($transparency > 100) { $transparency = 100; } elseif ($transparency < 1) { $transparency = 1; } switch ($place) { case 'center': ImageCopyMerge($this->gd, $wm->gd, ($this->Width - $wm->Width) / 2, ($this->Height - $wm->Height) / 2, 0, 0, $wm->Width, $wm->Height, $transparency); break; case 'top_left': ImageCopyMerge($this->gd, $wm->gd, 0, 0, 0, 0, $wm->Width, $wm->Height, $transparency); break; case 'top_right': ImageCopyMerge($this->gd, $wm->gd, $this->Width - $wm->Width, 0, 0, 0, $wm->Width, $wm->Height, $transparency); break; case 'down_right': ImageCopyMerge($this->gd, $wm->gd, $this->Width - $wm->Width, $this->Height - $wm->Height, 0, 0, $wm->Width, $wm->Height, $transparency); break; case 'down_left': ImageCopyMerge($this->gd, $wm->gd, 0, $this->Height - $wm->Height, 0, 0, $wm->Width, $wm->Height, $transparency); break; } $wm->Destruct(); }