Implements an image recognition captcha.

"; break; case 'admin/modules#description': case 'admin/modules/textimage': case 'admin/textimage': $output = t('Implements an image recognition captcha.'); break; } return $output; } function textimage_captchachallenge(&$form) { $form['captcha_response'] = array ( '#type' => 'textfield', '#title' => t('Captcha Validation'), '#default_value' => '', '#required' => TRUE, '#validate' => array('_captcha_validate' => array()), '#description' => t('Please type in the letters/numbers that are shown in the image above.'), '#prefix' => 'Captcha Image: you will need to recognize the text in it.', ); return $form; } function textimage_captchavalidate(&$captcha_word, &$correct) { $captcha_word = drupal_strtolower($captcha_word); if (($_SESSION['captcha'] != '') && $captcha_word == $_SESSION['captcha']) { $correct = true; } else { $correct = false; form_set_error('captcha_response', t('The image verification code you entered is incorrect.')); } } /** * Implementation of hook_menu(). */ function textimage_menu($may_cache) { $items = array(); $suffix = ''; if (arg(2)!=null) $suffix='/'.arg(2); $items[] = array( 'path' => '_textimage/image'.$suffix, 'title' => t('textimage'), 'callback' => '_textimage_image', 'access' => user_access('access textimages'), 'type' => MENU_CALLBACK ); return $items; } function textimage_perm() { return array('access textimages'); } function textimage_settings() { $fonts_path = variable_get("textimage_fonts_path", ""); $images_path = variable_get("textimage_images_path", ""); //check for GD if (!function_exists(imagecreate)) drupal_set_message(t('Image library not available. Textimage needs the GD library extension to be installed. Please install GD.')); //check for TTF support elseif (!function_exists(imagettftext)) drupal_set_message(t('Your image library does not seem to have TrueType font support. Textimage will work, but will use the default inbuilt font.'),'status'); //check for valid font path elseif ($fonts_path!="" && !is_dir($fonts_path)) drupal_set_message(t('The current font path is invalid. The default font will be used.')); //check for valid image path if ($images_path!="" && !is_dir($images_path)) drupal_set_message(t('The current images path is invalid. No images will be used.')); //Fonts settings $form['fonts'] = array( '#type' => 'fieldset', '#title' => t('Fonts settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fonts']['textimage_use_only_upper'] = array( '#type' => 'checkbox', '#title' => t('Use only Uppercase'), '#default_value' => variable_get('textimage_use_only_upper',0) ); $form['fonts']['textimage_fonts_path'] = array( '#type' => 'textfield', '#title' => t('TrueType Fonts Path'), '#default_value' => $fonts_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the Truetype (.ttf) fonts are stored. If you do not provide any fonts, the module will use the default font for text. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['fonts']['textimage_font_size'] = array( '#type' => 'textfield', '#title' => t('Font Size'), '#default_value' => variable_get('textimage_font_size',24), '#size' => 5, '#maxlength' => 2, '#description' => t('Font size of Captcha text (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_font_size")), ); $form['fonts']['textimage_char_spacing_max'] = array( '#type' => 'textfield', '#title' => t('Character Spacing'), '#default_value' => variable_get('textimage_char_spacing_max',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the kerning between letters in Captcha. Higher numbers indicate more spacing.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_spacing_max")), ); $form['fonts']['textimage_char_jiggle_amount'] = array( '#type' => 'textfield', '#title' => t('Character Jiggle'), '#default_value' => variable_get('textimage_char_jiggle_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of up and down movement in the Captcha letters. Higher numbers indicate more jiggling.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_jiggle_amount")), ); $form['fonts']['textimage_char_rotate_amount'] = array( '#type' => 'textfield', '#title' => t('Character Rotation'), '#default_value' => variable_get('textimage_char_rotate_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of rotation in the Captcha letters (in degrees, only works with non-default fonts).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_rotate_amount")), ); $form['fonts']['textimage_char_size_amount'] = array( '#type' => 'textfield', '#title' => t('Character Size Adjustment'), '#default_value' => variable_get('textimage_char_size_amount',2), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of variation in size between the different letters in the Captcha (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_size_amount")), ); //Image settings $form['images'] = array( '#type' => 'fieldset', '#title' => t('Image settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['images']['textimage_images_path'] = array( '#type' => 'textfield', '#title' => t('Background Images Path'), '#default_value' => $images_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the background images are stored. If you do not provide a directory, solid colors will be used. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['images']['textimage_image_noise'] = array( '#type' => 'textfield', '#title' => t('Image Noise (pixels)'), '#default_value' => variable_get('textimage_image_noise',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random pixels) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_noise")), ); $form['images']['textimage_image_lines'] = array( '#type' => 'textfield', '#title' => t('Image Noise (lines)'), '#default_value' => variable_get('textimage_image_lines',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random lines) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_lines")), ); $form['images']['textimage_image_margin'] = array( '#type' => 'textfield', '#title' => t('Image Margin'), '#default_value' => variable_get('textimage_image_margin',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Set a distance between the Captcha letters and the edges of the image.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_margin")), ); $form['info'] = array( '#type' => 'fieldset', '#title' => t('Image and font information'), '#collapsible' => TRUE, '#collapsed' => FALSE ); if (isset($fonts_path)) { $imagefontinfo .= t('Number of fonts found: ').count(_textimage_font_list()); } if (isset($images_path)) { $imagefontinfo .= '
'.t('Number of background images found: ').count(_textimage_image_list()); } $gdinfo = gd_info(); $imagefontinfo .= '
'.t('GD Version: ').$gdinfo["GD Version"]; $imagefontinfo .= '
'.t(' FreeType Support: '); $imagefontinfo .= ($gdinfo["FreeType Support"]==true) ? 'True' : 'False'; $imagefontinfo .= '
'; $form['info']['captcha_info'] = array ( '#type' => 'item', '#value' => $imagefontinfo, ); return $form; } function textimage_settings_form_validate ($form_id,$form) { //check for valid font path if ($form['textimage_fonts_path'] !="" && !is_dir($form['textimage_fonts_path'])) form_set_error('textimage_fonts_path', t('The entered font path is invalid')); //check for valid image path if ($form['textimage_images_path'] !="" && !is_dir($form['textimage_images_path'])) form_set_error('textimage_images_path', t('The entered image path is invalid')); } function _textimage_number_validate ($field,$fieldName) { if (!is_numeric($field['#value'])) { form_set_error($fieldName,t("The value for")." ".t($field['#title'])." ".t("must be a number")); } } /** * Prints an image containing a textimage code. */ function _textimage_image() { //if we don't have GD2 functions, we can't generate the image if (!function_exists('imagecreatetruecolor')) return; // Set headers header('Expires: Mon, 01 Jan 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/png'); $string = _textimage_code(); // Get truetype font list $fonts = _textimage_font_list(); // Get the background images list $images = _textimage_image_list(); // Randomization amounts: $charSpacingMax = variable_get('textimage_char_spacing_max',10); // Letter spacing max (pixels) $charSpacingMin = max($charSpacingMax*.5,0); // Letter spacing minimum (pixels) $charJiggleAmount = variable_get('textimage_char_jiggle_amount',5); // Up and down randomization (pixels) $charRotateAmount = variable_get('textimage_char_rotate_amount',5); // Character rotation amount (degrees) $charSizeAmount = variable_get('textimage_char_size_amount',2); // Character size amount (pixels) $imageRotateAmount = variable_get('captcha_image_rotate_amount',12); // Image rotation amount (degrees) // Static amounts: $charInitialSize = variable_get('textimage_font_size',24); // Initial Font $imageNoise = variable_get('textimage_image_noise',4); // Amount of noise added to image $imageLines = variable_get('textimage_image_lines',4); // Amount of noise added to image $imageMargin = variable_get('textimage_image_margin',10); // Margin around image (pixels) // write text using a truetype font if (function_exists(imagettftext) && count($fonts) > 0) { // Initialize variables for the loop $characterDetails = array(); // contains the final info about each character // Build a list of character settings for the captcha string for ($i=0;$i $charSize, "angle" => $charAngle, "x" => $x, "y" => $y, "color" => $foreground, "font" => $font, "char" => $char ); // Increment the image size $imageWidth = $x + $charWidth; $imageHeight = max($imageHeight,$y+$charJiggleAmount); } // Create the image based off the string length and margin if (count($images) > 0) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Specify colors to be used in the image $foreground = imagecolorallocate($im, rand(0, 80), rand(0, 80), rand(0, 80)); foreach($characterDetails as $char) { // draw character imagettftext($im,$char['size'],$char['angle'],$char['x']+$imageMargin,$char['y']+$imageMargin,$foreground,$char['font'],$char['char']); } } else { // write text using a built-in font $x = 0; $y = 0; $imageWidth = 60 + drupal_strlen($string)*$charSpacingMax*.35; $imageHeight = 30 + $charJiggleAmount; // Create the image if (count($images) > 0 && function_exists(imagecolorallocatealpha)) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth, $imageHeight); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth, $imageHeight); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Add the text for ($i=0;$i 0) { // Prepare a larger image with a background image $im2 = _textimage_create_transparent_image($imageWidth, $imageHeight); } else { // Prepare a larger image with a solid color $im2 = imagecreatetruecolor($imageWidth, $imageHeight); imagefill($im2, 0, 0, $background); } $result = imagecopyresampled ($im2, $im, $imageMargin, $imageMargin, 0, 0, $imageWidth, $imageHeight, imagesx($im), imagesy($im)); $im = $im2; } // strikethrough imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $foreground); // Add Noise for ($x=0; $x<$imageWidth; $x++) { for ($row=0; $row<$imageNoise;$row++) { $y = rand(0,$imageHeight); imagesetpixel($im, $x, $y, $noisecolor); } } // Add Lines and Ellipses for ($x=0; $x<$imageLines;$x++) { imageline($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); imageellipse($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); } // Fill image with a random background image if available if (count($images) > 0) { $image = $images[rand(0,count($images)-1)]; _textimage_apply_background_image($im,$image); } //output to browser imagepng($im); imagedestroy($im); } /** * Returns a random string for use in a captcha */ function _textimage_code() { $consts='bcdgjxvmnprst'; $vowels='aeiou'; for ($x=0; $x < 6; $x++) { mt_srand ((double) microtime() * 1000000); $const[$x] = drupal_substr($consts,mt_rand(0,drupal_strlen($consts)-1),1); $vow[$x] = drupal_substr($vowels,mt_rand(0,drupal_strlen($vowels)-1),1); } $string = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]; $string = drupal_substr($string,0,rand(4,6)); //everytime we create a new code, we write it to session $_SESSION['captcha'] = drupal_strtolower($string); if(variable_get('textimage_use_only_upper',0)) $string = drupal_strtoupper($string); return $string; } /** * Returns an array of files with TTF extensions in the specified directory. */ function _textimage_font_list() { $fontdir = variable_get("textimage_fonts_path", ""); $filelist = array(); if (is_dir($fontdir) && $handle = opendir($fontdir)) { while ($file = readdir($handle)) { if (preg_match("/\.ttf$/i",$file) == 1) $filelist[] = $fontdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Returns an array of files with jpg, png, and gif extensions in the specified directory. */ function _textimage_image_list() { $imagesdir = variable_get("textimage_images_path", ""); $filelist = array(); if (is_dir($imagesdir) && $handle = opendir($imagesdir)) { while ($file = readdir($handle)) { if (preg_match("/\.gif|\.png|\.jpg$/i",$file) == 1) $filelist[] = $imagesdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Overlays an image to the supplied image resource */ function _textimage_apply_background_image (&$imageResource,$imageFile) { $backgroundResource = image_gd_open($imageFile,substr($imageFile,-3)); // Copy the text onto the background $backX = imagesx($backgroundResource); $backY = imagesy($backgroundResource); $textX = imagesx($imageResource); $textY = imagesy($imageResource); $randomBackX = rand(0,$backX-$textX); $randomBackY = rand(0,$backY-$textY); // Place the text onto a random location of the background image imagecopyresampled($backgroundResource,$imageResource,$randomBackX,$randomBackY,0,0,$textX,$textY,$textX,$textY); // Crop the background image to the original image size imagecopyresampled($imageResource,$backgroundResource,0,0,$randomBackX,$randomBackY,$textX,$textY,$textX,$textY); } /** * Creates transparent image resources for images with graphic backgrounds */ function _textimage_create_transparent_image($x, $y) { $i = imagecreatetruecolor($x, $y); $b = imagecreatefromstring(base64_decode(_text_image_blankpng())); imagealphablending($i, false); imagesavealpha($i, true); imagecopyresized($i, $b ,0 ,0 ,0 ,0 ,$x, $y, imagesx($b), imagesy($b)); return $i; } function _text_image_blankpng() { $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m"; $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg"; $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN"; $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ"; $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA"; $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII="; return $c; } ?> Последний из... | Odesskiy Listok

Последний из...

user warning: Table './odessapage/cms_sessions' is marked as crashed and last (automatic?) repair failed query: SELECT COUNT(sid) AS count FROM cms_sessions WHERE timestamp >= 1586476936 AND uid = 0 in /home/hepa/public_html/new/includes/ on line 121.

Последний из…

Жарким июльским утром 1835 года, когда на вылинявшем небе не было ни облачка, когда листья на деревьях роскошного сада усадьбы поникли, ожидая обычного знойного дня, когда птицы, многочисленные, прекрасные и удивительные своим видом и происхождением, будто бы вдруг умолкли, именно в этот час не стало последнего из славного рода Разумовских – графа Петра Алексеевича…
Эта грустная новость всколыхнула Одессу. Со всех концов города, этой Галилеи юга России, к усадьбе загадочного графа – в сторону Водяной балки, на окраину Молдаванки – потянулись люди. Что же подвигло их придти в этот день туда, бросив обычные дела? Вульгарное любопытство? Желание прикоснуться к тайне? Или что-то иное, непонятное и притягательное, похожее на зов, могучее, хоть и едва различимое. Скорее всего, это было сильнейшее притяжение обаятельной личности. То влияние, которое трудно, пожалуй, невозможно выразить словами.
Так кто же он, Разумовский Петр Алексеевич, граф, последний отпрыск славного рода? Откуда эти обаяние и сила, так влиявшие на аристократов и простых людей?
Из широких украинских степей, где зелень полей сливается с бескрайней голубизной неба, где от пряного запаха полыни, любистка и железняка волнуется душа и на глазах появляется роса, а от щебетания птиц и мощного хора пчел и кузнечиков хочется самому выдохнуть радостную песню, вышли и возвысились сыны Григория Розума, стали властителями чувств и мыслей…
Кирилл Григорьевич Разумовский, брат Алексея Григорьевича, морганатического супруга императрицы, родился 18 марта 1728 года. Он появился при дворе Елизаветы, будучи подростком, затем был направлен заграницу для обучения, и уже по достижении 18 лет, в 1746 году, возглавил Императорскую Академию наук «в рассуждение усмотренной в нем особливой способности и приобретенного в науках искусства».
Образованный, умный, волевой молодой человек, снискавший всеобщее уважение, патриот своего древнего края, был самим провидением предназначен возглавить в 1750 году восстановленное гетманство Малороссии. Но в 1764 году последовал Указ об уничтожении гетманства и об «отставлении» Разумовского. В утешение Кириллу Григорьевичу было присвоено звание генерала-фельдмаршала. А в 1803 году последнего гетмана Малороссии, этой «сверхновой звезды» малороссийского небосклона, не стало.
Алексей Кириллович Разумовский – старший сын гетмана Кирилла Григорьевича и его супруги Екатерины Ивановны – получил великолепное образование, обладал колоссальной эрудицией и энциклопедическими познаниями. «Он был чрезвычайно высокомерен и горд, и это породило слух, что он считает себя сыном императрицы Елизаветы».
Подобно большинству образованных аристократов того времени, граф рано примкнул к масонству, что, в конечном счете, породило неприязнь к нему со стороны Екатерины II и привело к тому, что он покинул государственную службу, в которой состоял, будучи тайным советником и сенатором. Удалившись в любимое подмосковное село Горенки, Алексей Кириллович устроил замечательный ботанический сад, один из лучших в России, изобиловавший многочисленными (до 2000 экземпляров) редкими растениями.
При Александре I Алексей Кириллович вернулся на службу в чине действительного статского советника, был назначен попечителем Московского университета и его учебного округа. Его заслуги были признаны государем, в результате чего он принял пост министра народного просвещения. Стараниями графа Разумовского в Московском университете была открыта в 1811 году первая кафедра славянской филологии, а в целом по стране – 65 народных школ, 12 уездных училищ, несколько гимназий и, наконец, Казанский университет. В 1814-м Алексей Кириллович оставил пост министра, а с 1816 года – в полной отставке.
В 1774 году Разумовский вступил в брак с Варварой Петровной Шереметевой, считавшейся первой невестой России. А спустя год у четы, Алексея Кирилловича и Варвары Петровны, родился первенец – Петр. Юный граф в 1783 году был записан сержантом в Измайловский полк, с 1790 по 1795 обучался за границей в Геттингенском университете. Затем был назначен адъютантом к своему деду, гетману Кирилле Разумовскому, «который души не чаял в своем внуке».
С 1797-го Петр Алексеевич – на действительной военной службе, подполковник. Полковник в 1798 году (кстати, всего лишь 23 лет от роду!), командир гренадерского батальона, он состоял в армии своего дяди, генерала от инфантерии Ивана Васильевича Гудовича. (Девятью годами ранее авангардом этой армии командовал Иосиф де-Рибас, взявший турецкую крепость Хаджибей – предтечу Одессы). А в 1795-96 гг. адмирал де-Рибас, руководитель строительства Одессы, состоял в переписке с еще одним представителем знаменитой фамилии, дядей одесского Разумовского, графом Андреем Кирилловичем – русским посланником при венском дворе. В письмах адмирал рассказывает о едва народившемся городе, указывает на его выгодное положение, докладывает о крепости и первых постройках.
Разумовские и основатель Одессы связаны также одной трагической «темной» историей. Впрочем, имена фаворита императрицы Елизаветы и адмирала де-Рибаса соединила более молва, чем факты. Этот исторический анекдот возвращает нас к эпизоду с поимкой несчастной самозванки и авантюристки «княжны Таракановой». Она величала себя дочерью Алексея Григорьевича Разумовского и государыни, и именно ее-то, якобы, и заманил на корабль Орлова-Чесменского «коварный» Иосиф де-Рибас. Касательно происхождения «лже-княжны» существуют разные мнения, зато можно заявлять однозначно, что роль де-Рибаса в этом деле если и имела место, то была несущественна…
Но вернемся к герою нашего повествования. С 1801 года Петр Разумовский пожалован в действительные камергеры с оставлением армии, проживал в Петербурге, где «наделал много долгов». Это побудило его отца, графа Алексея Кирилловича, хлопотать о переводе сына на службу в Одессу, к генерал-губернатору герцогу Ришелье. Назначение не пришлось по сердцу молодому графу: его страшила скука в отдаленном месте. Тем не менее, в 1806 году, в чине действительного статского советника он был определен чиновником по особым поручениям при Новороссийском губернаторе.…
«Кто знает, что сблизило этих людей, официальные отношения между которыми перешли в приятельствование, если это слово годится для характеристики взаимоотношений между вельможами, один из которых был подчиненным». И в самом деле, Петр Алексеевич считал своим единственным другом герцога Ришелье, его одного он привечал и принимал у себя в доме, а губернатор, в свою очередь, отвечал ему взаимностью.

Дом Разумовского

Как говорят немногочисленные биографы графа, страсть к строительству Петр Алексеевич унаследовал от отца и знаменитого деда-гетмана Кирилла Григорьевича, который много строил в своих украинских имениях. Что касается архитектурных вкусов Разумовского и Ришелье, то вряд ли между ними имелось сходство. Герцога отличала скромность, а Петра Алексеевича привлекало все яркое, необычное, сказочное, «бравурно-пышное и громоздкое, сверх меры красочное и позолоченное». Как ни вспомнить здесь великолепный дом, исполненный тайн и диковинных редкостей, из «Золотой цепи» Александра Грина и его загадочного одинокого хозяина?
Он был огромен – этот дом. С большими и странными окнами в форме четырехлистника, украшенный колоннадами коринфского ордера. Стиль строения, пожалуй, трудно было определить, возводился он скорее не по архитектурным канонам, а только повинуясь безудержной фантазии хозяина. Большие светлые залы с богатой лепкой, в которой преобладали растительные мотивы Малороссии. Обильная позолота отражала лучи солнца, и воздух в залах дрожал, светился и переливался, создавая редкостное запоминающееся впечатление. Здесь все поражало воображение. Обилие зеркал в позолоченных рамах, мебель различных эпох и стилей, ковры из разных стран и гобелены. На каминных полках, рядом с модными европейскими часами стояли античные вазы и искусно расписанные украинские «глечики».
В доме была великолепная библиотека с драгоценными книгами и рукописями, а птицы, редкие, изумительные, с утра наполняли усадьбу своими песнями. Петр Алексеевич устроил замечательный сад, выписывая дорогостоящие растения из всех стран мира. Ришелье, также страстный любитель разведения садов, часто пользовался его советами, и Разумовский заказывал и поставлял ему саженцы. Согласно воспоминаниям Александра Де-Рибаса, внучатого племянника адмирала, литератора, одесского бытописца, к 1915 году сохранились еще следы пребывания графа в Одессе «в виде развалин его роскошного дворца и остатков его великолепных садов».
Граф так и не обзавелся семьей и был бездетен, но хозяйство вел широко, желая, чтобы у него всего было много, не утруждая себя каким-либо контролем, искренне доверяя своим многочисленным домочадцам. В доме было очень много красивых женщин и, конечно, одесская молва, такая же «доброжелательная и беспристрастная», как, впрочем, и сейчас, поведала «миру» о том, какой замечательный гарем у графа Разумовского.
Его любили. За доброту, искренность, защиту, которую он предоставлял всем, кто в ней нуждался, за красоту и обаяние. Образ жизни и мироощущение отразились на его внешности. Высокий, утонченный, на породистом, красивом бледном лице выделялись бездонные «врубелевские» глаза, поражавшие какой-то светлой грустью. Общавшиеся с ним замечали, что граф как будто находился одновременно в двух измерениях, одном – нашем, зримом, чувственном, и другом – тонком, таинственном… Он и ушел из жизни, ничем не болея, тихо, во сне, выполнив какое-то неведомое предназначение…
Граф Петр Алексеевич был масоном. Может быть, увлечение отца повлияло на формирование его философского воззрения, а возможно, и глубокое изучение тайных доктрин египетских жрецов и розенкрейцеров, элевсинских мистерий Платона. Ведь путешествуя, Петр Алексеевич бывал и в Египте, и в Греции, собирал сокровенные знания, книги и предметы. После его смерти, желая соблюсти православные обычаи, домочадцы спрятали масонские атрибуты, которые находились в специально устроенном им помещении.
«Его, собственно говоря, следовало бы называть не последним из Разумовских, а последним из русских Разумовских, - уточняет А. Де-Рибас, - потому что одна ветвь знаменитого семейства, переселившаяся за границу, пережила Петра Алексеевича на два года».
Петра Алексеевича похоронили на Одесском кладбище, ставшим впоследствии Старым или I-м Христианским, на котором потом упокоились замечательнейшие люди нашего отечества: Л.С. Пушкин, П.С. Пущин, Ф.М. де-Рибас, генерал Ф.Ф. Радецкий, Вера Холодная и многие, многие другие. В своей книге «Старая Одесса» Александр Де-Рибас призывает «отыскать его (Разумовского) могилу и привести ее в порядок». К сожалению, ныне это невозможно. В 20-х годах «красного века» некрополь уничтожили, а «на костях» славных предков был разбит парк им. Ильича. Но это – другая история…
В некрологе, опубликованном в «Одесском вестнике», обнаруживаем такие строки: «В воскресенье, 21 июля, происходило здесь погребение тела действительного камергера графа Петра Алексеевича Разумовского, скончавшегося 18 июля сего 1835 года. Покойный граф более 25 лет прожил в нашем городе… Одесские жители жалеют о нем, как об одном из самых дельных своих граждан, употребившем значительную часть богатого достояния своего на украшение окрестностей нашего города».
На физическом плане бытия граф Петр Алексеевич Разумовский не построил «свою Малороссию», удовлетворившись менее масштабными проектами, но в течение добрых двух десятков лет был «духовным водителем» Одессы, наполняя любовью и смыслом души ее созидателей. И если до настоящего времени дошли истории и легенды о жизни загадочного графа и его замечательном доме – стало быть, свою миссию последний из славного рода Разумовских выполнил…

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <tr> <td> <table>
  • Lines and paragraphs break automatically.
  • Images can be added to this post.
More information about formatting options