Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Crop images class (GD)


cmd

Recommended Posts

imagecrop.php

Что умеет?

1. Ресайз обычный с полями

2. Ресайз по ширине

3. Ресайз по высоте

4. Перевернуть

5. Crop

6. Управление качеством сжатия

7. Управление цветом подложки

Как использовать?

Вставляем модель, типа

$this->load->model('tool/imagecrop');

Потом вызываем метод resize, например:

1. Уменьшене по ширине с сохранением пропорции

$this->model_tool_imagecrop->resize(
$product_info['image'], // путь к картинке от папки с картинками
100, // ширина миниатюры
0 // высота будет расчитана автоматически с сохранением пропорции
);

2. Crop и переворот на 90 градусов

$this->model_tool_imagecrop->resize(
$product_info['image'], // путь к картинке от папки с картинками
500, // ширина миниатюры
500, // высота миниатюры
'0x000000',  // фон подложки черный
100, // качество 100%
true, // блять, не помню зачем я это сделал. как-то связано с позиционированием относительно полей
90, // первернуть на 90 градусов
array('x1' => 10, 'x2' => 150, 'y1' => 10, 'y2' => 150) // координаты для crop относительно оригинального изображения
);

P.S. Обратите внимание, что resize можно использовать не только для уменьшения, но и для увеличения ;)

  • +1 3
Надіслати
Поділитися на інших сайтах

Вспомнил зачем переменная $cute_borders принимает значения true || false!

При ресайзе могут появляется поля (в зависимости от пропорций):

- если true, то поля будут обрезаны

- если false поля будут на месте (цвет подложки)

  • +1 1
Надіслати
Поділитися на інших сайтах

  • 5 months later...

Nickkam,

Во-первых, OpenCart и так уменьшает изображения. Это специальный PHP класс для тех, кому надо выполнять дополнительные операции с изображениями.

Во-вторых, это универсальное решение т.е. Вы можете его использовать где угодно и как угодно. Другими словами это гаечный ключ: можете гайки закручивать, а можете голову себе проломить - зависит исключительно от Ваших навыков. Вся необходимая документация, как мне кажется, приведена в первом посте.

Надіслати
Поділитися на інших сайтах

ну я слишком новичок значит чтобы понять это все, просто ищу решение, которое бы уменьшало изображение только по ширине и сохроняло пропорции. А opencart такой возможности не дает, и появляются белые полосы

Надіслати
Поділитися на інших сайтах


  • 7 months later...
  • 1 year later...
  • 2 years later...

Попробовал применить на ocStore 2.3. Поругалось на HTTPS_IMAGE и HTTP_IMAGE. Так как их в конфиге нет, предлагаю заменить

		if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
			return HTTPS_IMAGE . $new_image;
		} else {
			return HTTP_IMAGE . $new_image;
		}

на

		if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
			return HTTPS_SERVER . 'image/' . $new_image;
		} else {
			return HTTP_SERVER . 'image/' . $new_image;
		}

Работает отлично. Утилита очень помогла.

Исправленный вариант под 2.3 прикрепил.

 

Как применять.

Во-первых, закидываем данный файл в catalog/model/tool
Затем заходим в любой контроллер, где у нас происходит ресайз картинок. Например, catalog/controller/category.php

Находим

$this->load->model('tool/image');

Ниже дописываем 

$this->load->model('tool/imagecrop');

 

Далее находим место, которое отвечает за размер изображения товара в списке товаров на странице категории. В ocStore 2.3 оно выглядит так

				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
				}

Меняем на 

				if ($result['image']) {
					//$image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
					$image = $this->model_tool_imagecrop->resize($result['image'], 200, 0);
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
				}

Я специально оставил закомментированным стандартный код. Вы спокойно можете взять из него ширину, которая указывается в конфиге магазина, что может быть весьма удобно. Это одни из множества возможных примеров. В моем конкретном случае было необходимо сохранить пропорцию для изображений разного размера.

imagecrop.php

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 5 months later...
В 21.04.2017 в 22:45, olyura сказал:

Попробовал применить на ocStore 2.3. Поругалось на HTTPS_IMAGE и HTTP_IMAGE. Так как их в конфиге нет, предлагаю заменить


		if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
			return HTTPS_IMAGE . $new_image;
		} else {
			return HTTP_IMAGE . $new_image;
		}

на


		if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
			return HTTPS_SERVER . 'image/' . $new_image;
		} else {
			return HTTP_SERVER . 'image/' . $new_image;
		}

Работает отлично. Утилита очень помогла.

Исправленный вариант под 2.3 прикрепил.

 

Как применять.

Во-первых, закидываем данный файл в catalog/model/tool
Затем заходим в любой контроллер, где у нас происходит ресайз картинок. Например, catalog/controller/category.php

Находим


$this->load->model('tool/image');

Ниже дописываем 


$this->load->model('tool/imagecrop');

 

Далее находим место, которое отвечает за размер изображения товара в списке товаров на странице категории. В ocStore 2.3 оно выглядит так


				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
				}

Меняем на 


				if ($result['image']) {
					//$image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
					$image = $this->model_tool_imagecrop->resize($result['image'], 200, 0);
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
				}

Я специально оставил закомментированным стандартный код. Вы спокойно можете взять из него ширину, которая указывается в конфиге магазина, что может быть весьма удобно. Это одни из множества возможных примеров. В моем конкретном случае было необходимо сохранить пропорцию для изображений разного размера.

imagecrop.php

 

 

Наа 2.3 Работает идеально.

Змінено користувачем maiki
Надіслати
Поділитися на інших сайтах

  • 2 months later...

Я правильно понимаю, что с его помощью я могу кропить изображения избегая белых полей по краям? 

Спасибо, земляк!

Змінено користувачем LusiAlberto
Надіслати
Поділитися на інших сайтах


  • 3 months later...

Доброго времени суток. Кроп действительно не работал. Вот исправленный оригинальный файл с полностью рабочим кропом. Все работает по инструкции из первого поста.

imagecrop.php

Надіслати
Поділитися на інших сайтах


  • 3 months later...

OC 2.3.0.2

Закинул файл imagecrop.php в catalog\model\tool (пробовал все три приложенные в посте)

в catalog\controller\product\category.php добавил

$this->load->model('tool/imagecrop');

Поменял там же вывод изображения как описано выше.
При открытии категорий, белый экран. Что не так?

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Может быть тема мертва, но я просто не врубаюсь как этим классом заресайзить картинку без полей. Грубо говоря я хочу обрезать картинку, если она не влазиет по пропорциям

Змінено користувачем OZ1245
Надіслати
Поділитися на інших сайтах


  • 2 years later...

Добрый день.
Подскажите для новичка, мне нужна Обрезка всех фото, например,  снизу на 21%  (Обрезка с сохранением новых, уже обрезанных фото), есть ли какое то решение?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.