Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Crop images class (GD)


cmd
 Поделиться

Рекомендованные сообщения

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 месяцев спустя...

Nickkam,

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

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

Ссылка на комментарий
Поделиться на других сайтах

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

Ссылка на комментарий
Поделиться на других сайтах


  • 7 месяцев спустя...
  • 1 год спустя...

М да выложил, по умничал и смылся. Хоть бы один пример привел чтобы понятней было. Как например с изображениям в категориях использовать?

Ссылка на комментарий
Поделиться на других сайтах


  • 2 года спустя...

Попробовал применить на 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 месяцев спустя...
В 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 месяца спустя...

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

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

Изменено пользователем LusiAlberto
Ссылка на комментарий
Поделиться на других сайтах


  • 3 месяца спустя...

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

imagecrop.php

Ссылка на комментарий
Поделиться на других сайтах


  • 3 месяца спустя...

OC 2.3.0.2

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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах


  • 1 год спустя...

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

Изменено пользователем OZ1245
Ссылка на комментарий
Поделиться на других сайтах


  • 2 года спустя...

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

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.