Перейти к содержимому


Фотография
- - - - -

JBimage - crop - resize - JBZoo Image

jbzoo image

Лучший Ответ CB9TOIIIA , 10 February 2016 - 14:47

Первым решением обошелся:

 

X2n9tyE.png
 

 

Изменил 250 строки на:


	        // smart resize thumbnail image
	        // my rules for slider resize
			if ($this->thumb_resize) {
				$resized_width  = @($this->thumb_height / $this->img_height  ) * $this->img_width;
				$resized_height = @($this->thumb_width / $this->img_width) * $this->img_height;

				if ($this->thumb_width <= $resized_width) {
					$width  = $resized_width;
					$height = $this->thumb_height;
					$src_x  = intval(($resized_width - $this->thumb_width) / $this->thumb_width);
				} else {
					$width  = $this->thumb_width;
					$height = $resized_height;
					$src_y  = intval(($resized_height - $this->thumb_height) / $this->thumb_height);
				}

Полный файл:

<?php
/**
 * @package   com_zoo
 * @author    YOOtheme http://www.yootheme.com
 * @copyright Copyright (C) YOOtheme GmbH
 * @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
 */

/**
 * Image thumbnail helper class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class ImageThumbnailHelper extends AppHelper {

	/**
	 * Creates an AppImageThumbnail instance
	 *
	 * @param string $file The filepath
	 *
	 * @return AppImageThumbnail
	 *
	 * @since 2.0
	 */
	public function create($file) {
		return $this->app->object->create('AppImageThumbnail', array($file));
	}

	/**
	 * Checks for the required php functions
	 *
	 * @return boolean
	 *
	 * @since 2.0
	 */
    public function check() {
		$gd_functions = array(
			'getimagesize',
			'imagecreatefromgif',
			'imagecreatefromjpeg',
			'imagecreatefrompng',
			'imagecreatetruecolor',
			'imagecopyresized',
			'imagecopy',
			'imagegif',
			'imagejpeg',
			'imagepng'
			);

		foreach ($gd_functions as $name) {
			if (!function_exists($name)) return false;
		}

		return true;
    }

}

/**
 * Image thumbnail class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class AppImageThumbnail {

	/**
	 * App instance
	 *
	 * @var App
	 * @since 2.0
	 */
	public $app;

	/**
	 * The image file path
	 * @var string
	 */
	public $img_file;

	/**
	 * The image format
	 * @var string
	 */
	public $img_format;

	/**
	 * The image source
	 * @var resource
	 */
	public $img_source;

	/**
	 * The image width
	 * @var string
	 */
	public $img_width;

	/**
	 * The image height
	 * @var string
	 */
	public $img_height;

	/**
	 * The thumb width
	 * @var string
	 */
	public $thumb_width;

	/**
	 * The thumb height
	 * @var string
	 */
	public $thumb_height;

	/**
	 * The thumb resize
	 * @var boolean
	 */
	public $thumb_resize;

	/**
	 * The thumb quality
	 * @var int
	 */
	public $thumb_quality;

	/**
	 * Class constructor
	 *
	 * @param string $file The file path.
	 * @since 2.0
	 */
    public function __construct($file) {

        $this->img_file      = $file;
        $this->thumb_resize  = true;
        $this->thumb_quality = 100;

		// get image info
		list($width, $height, $type, $attr) = @getimagesize($this->img_file, $info);

		// set image dimensions and type
		if (is_array($info)) {

	        $this->img_width    = $width;
	        $this->img_height   = $height;
	        $this->thumb_width  = $width;
	        $this->thumb_height = $height;

			switch ($type) {
	            case 1:
	                $this->img_format = 'gif';
	            	$this->img_source = imagecreatefromgif($this->img_file);
	                break;
	            case 2:
                	$this->img_format = 'jpeg';
	            	$this->img_source = imagecreatefromjpeg($this->img_file);
	                break;
	            case 3:
            		$this->img_format = 'png';
	            	$this->img_source = imagecreatefrompng($this->img_file);
	                break;
	            default:
	                $this->img_format = null;
	            	$this->img_source = null;
	                break;
	        }
		}
    }

	/**
	 * Set resize
	 *
	 * @param boolean $resize Resize value
	 *
	 * @return void
	 * @since 2.0
	 */
    public function setResize($resize) {
		$this->thumb_resize = $resize;
    }

	/**
	 * Set thumb dimensions
	 *
	 * @param int $width
	 * @param int $height
	 *
	 * @return void
	 * @since 2.0
	 */
    public function setSize($width, $height) {
		$this->thumb_width  = $width;
		$this->thumb_height = $height;
    }

	/**
	 * Size thumb width
	 *
	 * @param int $width
	 *
	 * @return void
	 * @since 2.0
	 */
    public function sizeWidth($width) {
		$this->thumb_width  = $width;
		$this->thumb_height = @($width / $this->img_width) * $this->img_height;
    }

	/**
	 * Size thumb height
	 *
	 * @param int $height
	 *
	 * @return void
	 * @since 2.0
	 */
    public function sizeHeight($height) {
		$this->thumb_width  = @($height / $this->img_height) * $this->img_width;
		$this->thumb_height = $height;
    }

	/**
	 * Save file
	 *
	 * @param string $file the file to save
	 *
	 * @return boolean true on success
	 * @since 2.0
	 */
    public function save($file) {
		$return = false;

		if ($this->img_format) {

			$src   = $this->img_source;
			$src_x = 0;
			$src_y = 0;

	        // smart resize thumbnail image
	        // my rules for slider resize
			if ($this->thumb_resize) {
				$resized_width  = @($this->thumb_height / $this->img_height  ) * $this->img_width;
				$resized_height = @($this->thumb_width / $this->img_width) * $this->img_height;

				if ($this->thumb_width <= $resized_width) {
					$width  = $resized_width;
					$height = $this->thumb_height;
					$src_x  = intval(($resized_width - $this->thumb_width) / $this->thumb_width);
				} else {
					$width  = $this->thumb_width;
					$height = $resized_height;
					$src_y  = intval(($resized_height - $this->thumb_height) / $this->thumb_height);
				}

				$src = imagecreatetruecolor($width, $height);

				// save transparent colors
				if ($this->img_format == 'png') {
					imagecolortransparent($src, imagecolorallocate($src, 0, 0, 0));
					imagealphablending($src, false);
					imagesavealpha($src, true);
				}

				// get and reallocate transparency-color for gif
				if ($this->img_format == 'gif') {
					imagealphablending($src, false);
					$transindex = imagecolortransparent($this->img_source) <= imagecolorstotal($src) ? imagecolortransparent($this->img_source) : imagecolorstotal($src);
					if ($transindex >= 0) {
						$transcol = imagecolorsforindex($this->img_source, $transindex);
						$transindex = imagecolorallocatealpha($src, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
						imagefill($src, 0, 0, $transindex);
					}
				}

				if (function_exists('imagecopyresampled')) {
					@imagecopyresampled($src, $this->img_source, 0, 0, 0, 0, $width, $height, $this->img_width, $this->img_height);
				} else {
					@imagecopyresized($src, $this->img_source, 0, 0, 0, 0, $width, $height, $this->img_width, $this->img_height);
				}

				// restore transparency for gif
				if ($this->img_format == 'gif') {
					if ($transindex >= 0) {
						imagecolortransparent($src, $transindex);
						for ($y=0; $y < imagesy($src); ++$y) {
							for ($x=0; $x < imagesx($src); ++$x) {
								if (((imagecolorat($src, $x, $y)>>24) & 0x7F) >= 100) {
									imagesetpixel($src, $x, $y, $transindex);
								}
							}
						}
					}
				}
			}

	        // create thumbnail image
			$thumbnail = imagecreatetruecolor($this->thumb_width, $this->thumb_height);

			// save transparent colors for png
			if ($this->img_format == 'png') {
				imagecolortransparent($thumbnail, imagecolorallocate($src, 0, 0, 0));
				imagealphablending($thumbnail, false);
				imagesavealpha($thumbnail, true);
			}

			// get and reallocate transparency-color for gif
			if ($this->img_format == 'gif') {
				imagealphablending($thumbnail, false);
				$transindex = imagecolortransparent($src);
				if ($transindex >= 0) {
					$transcol = imagecolorsforindex($src, $transindex);
					$transindex = imagecolorallocatealpha($thumbnail, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
					imagefill($thumbnail, 0, 0, $transindex);
				}
			}

			@imagecopy($thumbnail, $src, 0, 0, $src_x, $src_y, $this->thumb_width, $this->thumb_height);

			// restore transparency for gif
			if ($this->img_format == 'gif') {
				if ($transindex >= 0) {
					imagecolortransparent($thumbnail, $transindex);
					for ($y=0; $y < imagesy($thumbnail); ++$y) {
						for ($x=0; $x < imagesx($thumbnail); ++$x) {
							if (((imagecolorat($thumbnail, $x, $y)>>24) & 0x7F) >= 100) {
								imagesetpixel($thumbnail, $x, $y, $transindex);
							}
						}
					}
				}
			}

			// save thumbnail to file
			ob_start();
			switch ($this->img_format) {
	            case 'gif':
	            	$return = imagegif($thumbnail);
	                break;
	            case 'jpeg':
	       			$return = imagejpeg($thumbnail, null, $this->thumb_quality);
	                break;
	            case 'png':
	    			$return = imagepng($thumbnail);
					break;
	        }
			$output = ob_get_contents();
			ob_end_clean();
			JFile::write($file, $output);

			// free memory resources
			imagedestroy($thumbnail);
			imagedestroy($src);
		}

		return $return;
    }

}
Перейти к сообщению


Сообщений в теме: 13

#1 CB9TOIIIA

CB9TOIIIA

Отправлено 09 February 2016 - 14:37

Всем привет! В общем хочу разобраться с JBZoo Image, надо сделать адекватный кроп (например с заливкой) или же например низ резать (хотя бы)...

 

Вот пример: 720x300 в слайдер надо.

 

Оригинал: 800x533

 

rkHwzu4s.jpg
 
UcMB75s.png
 
Вопрос к экспертам, как поступить? как лучше и как вообще можно сделать?
 
На сайте используется FLY slider: http://forum.jbzoo.c...arusel-ajtemov/
 
 
 

  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 10 February 2016 - 13:06

CB9TOIIIA, класс самого Zoo для кропа изображений, который используется в JBZoo не может кропить по указанным координатам. Если есть навыки можно его хакнуть а так же сам элемент:

\administrator\components\com_zoo\helpers\imagethumbnail.php 

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


  • 2
Изображение
 

#3 CB9TOIIIA

CB9TOIIIA

Отправлено 10 February 2016 - 14:47   Лучший Ответ

Первым решением обошелся:

 

X2n9tyE.png
 

 

Изменил 250 строки на:


	        // smart resize thumbnail image
	        // my rules for slider resize
			if ($this->thumb_resize) {
				$resized_width  = @($this->thumb_height / $this->img_height  ) * $this->img_width;
				$resized_height = @($this->thumb_width / $this->img_width) * $this->img_height;

				if ($this->thumb_width <= $resized_width) {
					$width  = $resized_width;
					$height = $this->thumb_height;
					$src_x  = intval(($resized_width - $this->thumb_width) / $this->thumb_width);
				} else {
					$width  = $this->thumb_width;
					$height = $resized_height;
					$src_y  = intval(($resized_height - $this->thumb_height) / $this->thumb_height);
				}

Полный файл:

<?php
/**
 * @package   com_zoo
 * @author    YOOtheme http://www.yootheme.com
 * @copyright Copyright (C) YOOtheme GmbH
 * @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
 */

/**
 * Image thumbnail helper class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class ImageThumbnailHelper extends AppHelper {

	/**
	 * Creates an AppImageThumbnail instance
	 *
	 * @param string $file The filepath
	 *
	 * @return AppImageThumbnail
	 *
	 * @since 2.0
	 */
	public function create($file) {
		return $this->app->object->create('AppImageThumbnail', array($file));
	}

	/**
	 * Checks for the required php functions
	 *
	 * @return boolean
	 *
	 * @since 2.0
	 */
    public function check() {
		$gd_functions = array(
			'getimagesize',
			'imagecreatefromgif',
			'imagecreatefromjpeg',
			'imagecreatefrompng',
			'imagecreatetruecolor',
			'imagecopyresized',
			'imagecopy',
			'imagegif',
			'imagejpeg',
			'imagepng'
			);

		foreach ($gd_functions as $name) {
			if (!function_exists($name)) return false;
		}

		return true;
    }

}

/**
 * Image thumbnail class.
 *
 * @package Component.Helpers
 * @since 2.0
 */
class AppImageThumbnail {

	/**
	 * App instance
	 *
	 * @var App
	 * @since 2.0
	 */
	public $app;

	/**
	 * The image file path
	 * @var string
	 */
	public $img_file;

	/**
	 * The image format
	 * @var string
	 */
	public $img_format;

	/**
	 * The image source
	 * @var resource
	 */
	public $img_source;

	/**
	 * The image width
	 * @var string
	 */
	public $img_width;

	/**
	 * The image height
	 * @var string
	 */
	public $img_height;

	/**
	 * The thumb width
	 * @var string
	 */
	public $thumb_width;

	/**
	 * The thumb height
	 * @var string
	 */
	public $thumb_height;

	/**
	 * The thumb resize
	 * @var boolean
	 */
	public $thumb_resize;

	/**
	 * The thumb quality
	 * @var int
	 */
	public $thumb_quality;

	/**
	 * Class constructor
	 *
	 * @param string $file The file path.
	 * @since 2.0
	 */
    public function __construct($file) {

        $this->img_file      = $file;
        $this->thumb_resize  = true;
        $this->thumb_quality = 100;

		// get image info
		list($width, $height, $type, $attr) = @getimagesize($this->img_file, $info);

		// set image dimensions and type
		if (is_array($info)) {

	        $this->img_width    = $width;
	        $this->img_height   = $height;
	        $this->thumb_width  = $width;
	        $this->thumb_height = $height;

			switch ($type) {
	            case 1:
	                $this->img_format = 'gif';
	            	$this->img_source = imagecreatefromgif($this->img_file);
	                break;
	            case 2:
                	$this->img_format = 'jpeg';
	            	$this->img_source = imagecreatefromjpeg($this->img_file);
	                break;
	            case 3:
            		$this->img_format = 'png';
	            	$this->img_source = imagecreatefrompng($this->img_file);
	                break;
	            default:
	                $this->img_format = null;
	            	$this->img_source = null;
	                break;
	        }
		}
    }

	/**
	 * Set resize
	 *
	 * @param boolean $resize Resize value
	 *
	 * @return void
	 * @since 2.0
	 */
    public function setResize($resize) {
		$this->thumb_resize = $resize;
    }

	/**
	 * Set thumb dimensions
	 *
	 * @param int $width
	 * @param int $height
	 *
	 * @return void
	 * @since 2.0
	 */
    public function setSize($width, $height) {
		$this->thumb_width  = $width;
		$this->thumb_height = $height;
    }

	/**
	 * Size thumb width
	 *
	 * @param int $width
	 *
	 * @return void
	 * @since 2.0
	 */
    public function sizeWidth($width) {
		$this->thumb_width  = $width;
		$this->thumb_height = @($width / $this->img_width) * $this->img_height;
    }

	/**
	 * Size thumb height
	 *
	 * @param int $height
	 *
	 * @return void
	 * @since 2.0
	 */
    public function sizeHeight($height) {
		$this->thumb_width  = @($height / $this->img_height) * $this->img_width;
		$this->thumb_height = $height;
    }

	/**
	 * Save file
	 *
	 * @param string $file the file to save
	 *
	 * @return boolean true on success
	 * @since 2.0
	 */
    public function save($file) {
		$return = false;

		if ($this->img_format) {

			$src   = $this->img_source;
			$src_x = 0;
			$src_y = 0;

	        // smart resize thumbnail image
	        // my rules for slider resize
			if ($this->thumb_resize) {
				$resized_width  = @($this->thumb_height / $this->img_height  ) * $this->img_width;
				$resized_height = @($this->thumb_width / $this->img_width) * $this->img_height;

				if ($this->thumb_width <= $resized_width) {
					$width  = $resized_width;
					$height = $this->thumb_height;
					$src_x  = intval(($resized_width - $this->thumb_width) / $this->thumb_width);
				} else {
					$width  = $this->thumb_width;
					$height = $resized_height;
					$src_y  = intval(($resized_height - $this->thumb_height) / $this->thumb_height);
				}

				$src = imagecreatetruecolor($width, $height);

				// save transparent colors
				if ($this->img_format == 'png') {
					imagecolortransparent($src, imagecolorallocate($src, 0, 0, 0));
					imagealphablending($src, false);
					imagesavealpha($src, true);
				}

				// get and reallocate transparency-color for gif
				if ($this->img_format == 'gif') {
					imagealphablending($src, false);
					$transindex = imagecolortransparent($this->img_source) <= imagecolorstotal($src) ? imagecolortransparent($this->img_source) : imagecolorstotal($src);
					if ($transindex >= 0) {
						$transcol = imagecolorsforindex($this->img_source, $transindex);
						$transindex = imagecolorallocatealpha($src, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
						imagefill($src, 0, 0, $transindex);
					}
				}

				if (function_exists('imagecopyresampled')) {
					@imagecopyresampled($src, $this->img_source, 0, 0, 0, 0, $width, $height, $this->img_width, $this->img_height);
				} else {
					@imagecopyresized($src, $this->img_source, 0, 0, 0, 0, $width, $height, $this->img_width, $this->img_height);
				}

				// restore transparency for gif
				if ($this->img_format == 'gif') {
					if ($transindex >= 0) {
						imagecolortransparent($src, $transindex);
						for ($y=0; $y < imagesy($src); ++$y) {
							for ($x=0; $x < imagesx($src); ++$x) {
								if (((imagecolorat($src, $x, $y)>>24) & 0x7F) >= 100) {
									imagesetpixel($src, $x, $y, $transindex);
								}
							}
						}
					}
				}
			}

	        // create thumbnail image
			$thumbnail = imagecreatetruecolor($this->thumb_width, $this->thumb_height);

			// save transparent colors for png
			if ($this->img_format == 'png') {
				imagecolortransparent($thumbnail, imagecolorallocate($src, 0, 0, 0));
				imagealphablending($thumbnail, false);
				imagesavealpha($thumbnail, true);
			}

			// get and reallocate transparency-color for gif
			if ($this->img_format == 'gif') {
				imagealphablending($thumbnail, false);
				$transindex = imagecolortransparent($src);
				if ($transindex >= 0) {
					$transcol = imagecolorsforindex($src, $transindex);
					$transindex = imagecolorallocatealpha($thumbnail, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
					imagefill($thumbnail, 0, 0, $transindex);
				}
			}

			@imagecopy($thumbnail, $src, 0, 0, $src_x, $src_y, $this->thumb_width, $this->thumb_height);

			// restore transparency for gif
			if ($this->img_format == 'gif') {
				if ($transindex >= 0) {
					imagecolortransparent($thumbnail, $transindex);
					for ($y=0; $y < imagesy($thumbnail); ++$y) {
						for ($x=0; $x < imagesx($thumbnail); ++$x) {
							if (((imagecolorat($thumbnail, $x, $y)>>24) & 0x7F) >= 100) {
								imagesetpixel($thumbnail, $x, $y, $transindex);
							}
						}
					}
				}
			}

			// save thumbnail to file
			ob_start();
			switch ($this->img_format) {
	            case 'gif':
	            	$return = imagegif($thumbnail);
	                break;
	            case 'jpeg':
	       			$return = imagejpeg($thumbnail, null, $this->thumb_quality);
	                break;
	            case 'png':
	    			$return = imagepng($thumbnail);
					break;
	        }
			$output = ob_get_contents();
			ob_end_clean();
			JFile::write($file, $output);

			// free memory resources
			imagedestroy($thumbnail);
			imagedestroy($src);
		}

		return $return;
    }

}

Сообщение отредактировал CB9TOIIIA: 10 February 2016 - 14:47

  • 3

#4 SmetDenis

SmetDenis

Отправлено 11 February 2016 - 16:25

Думаю будет полезно другим, т.к часто попадается этот вопрос.

Перенес в рецепты.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 woodman

woodman

Отправлено 11 February 2016 - 16:31

Не надо такое решение в рецепты, т.к. это у него в примере просто картинки такие, где все сверху.

Завтра загрузит фотку офигенного заката на фоне моря и в итоге получит просто небо, без, собственно, моря :)

Нафиг такой кроп нужен


  • 1

#6 SmetDenis

SmetDenis

Отправлено 11 February 2016 - 16:51

Как раз работаю над кропом для 3.0 и задался этим вопросом.

Каким образом сделать кроп удобным, когда при ресайзе меняются пропорции картинки ?


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 CB9TOIIIA

CB9TOIIIA

Отправлено 11 February 2016 - 16:54

Не надо такое решение в рецепты, т.к. это у него в примере просто картинки такие, где все сверху.

Завтра загрузит фотку офигенного заката на фоне моря и в итоге получит просто небо, без, собственно, моря :)

Нафиг такой кроп нужен

 

Есть доля правды) но тут второй способ - только для бородатых подойдет)))


Как раз работаю над кропом для 3.0 и задался этим вопросом.

Каким образом сделать кроп удобным, когда при ресайзе меняются пропорции картинки ?

 

ИМХО: http://fengyuanchen.github.io/cropper/- если дать возможность, было бы супер.


  • 0

#8 SmetDenis

SmetDenis

Отправлено 11 February 2016 - 17:11

ИМХО: http://fengyuanchen....ub.io/cropper/-если дать возможность, было бы супер.
 

 

И каким образом?

Например, у нас 100500 картинок, загрузились на сайт импортом.

Где-то есть люди и им не нужно срезать полбашки (как Меркль) а где-то закат и небо.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#9 CB9TOIIIA

CB9TOIIIA

Отправлено 11 February 2016 - 17:44

 

 

И каким образом?

Например, у нас 100500 картинок, загрузились на сайт импортом.

Где-то есть люди и им не нужно срезать полбашки (как Меркль) а где-то закат и небо.

 

 

Я за то, чтобы сделать radio кнопками выбор.

1. Кому-то (как сейчас) пофиг - оставить как есть (грубо говоря)

2. Лишнее пространство заливать фоном (выбор - белый, черный, другой).

3. Edit image (т.е. как надстройка - по ней выходит popup - в котором можно руками задать нужную область - нужного размера) - > SAVE

 

Как-то так)


  • 0

#10 Sliapy

Sliapy

Отправлено 11 February 2016 - 17:49

Имхо, идеального решения здесь не будет. Если делать кроп - будет обрезать головы или другие важные части, если делать ресайз с заливкой (в opencart'e, например, именно так), то будет примерно так

 

urci_200x0.jpg

 

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

 

Если говорить именно об автоматической обработке, то, мне кажется, самым простым было бы дать просто возможность в настройке элемента указывать кропить/ресайзить с заливкой. Вроде бы, где-то видел еще возможность указывать, от какого места строить обрезку (верхний левый угол, центр и т.п.).

 

Ну а в вордпрессе что-то похожее на http://fengyuanchen.github.io/cropper/и используется. Только попроще. Т.е. при загрузке генерируется тамбнейл автоматически, но всегда можно отрезать его от оригинала самому руками и заменить сгенерированный.

 

Добавлено: пока писал, CB9TOIIIA изложил что-то похожее :)


Сообщение отредактировал Sliapy: 11 February 2016 - 17:49

  • 3
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]





Темы с аналогичным тегами jbzoo image

Click to return to top of page in style!