Я использую Magento 2 CE версии 2.1.0
У меня есть пользовательский модуль с полем изображения. Когда он будет загружен, я хочу изображения разного размера, так как для продукта у нас есть миниатюра изображения, изображение списка и изображение страницы с информацией о продукте.
Возможность загрузить 1 изображение без изменения размера.
Я использую приведенный ниже код для изменения размера изображения, но он дает URL изображения продукта. Не мой пользовательский модуль.
\ Приложение \ код \ Пользовательские \ Модули \ блок \ MyPosts \ edit.php
public function getImage($posts, $image) {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_imagehelper = $objectManager->get('Magento\Catalog\Helper\Image');
echo $postImage = $_imagehelper->init($posts, $image)->constrainOnly(FALSE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize(400)->getUrl();
exit;
}
Ниже приводится URL-адрес http: //localhost/magento2/pub/static/frontend/Magento/luma/en_US/Magento_Catalog/images/product/placeholder/.jpg
Мое изображение хранится здесь: \magento2\pub\media\custom_module\posts\image
.
Как я могу изменить размер изображения с этим путем и как я могу сохранить / получить изображение другого размера?
источник
Принятый ответ не учитывает кэширование изображения для повышения производительности. Вам не нужно изменять размер и перезаписывать изображение каждый раз, когда оно запрашивается. Следующий подход сохраняет изображение с измененным размером в папку «кеш», поэтому последовательные вызовы возвращают изображение из кеша. Метод содержится в помощнике (не блоке), поэтому вы можете вызывать его из любого понравившегося вам шаблона:
Приложение / код / Vendor / пространство имен / Helper / image.php
Теперь из любого шаблона .phtml вы можете вызвать метод следующим образом:
источник
if (!$this->_fileExists($path . $image)) {
наif (!$this->_fileExists($path . $image) && $this->_fileExists($mediaFolder . $image)) {
\Magento\Catalog\Helper\Image
.Боюсь, вам не нужно создавать новые классы для изменения размера ваших изображений, поскольку у помощников Magento это уже есть (см.
\Magento\Catalog\Helper\Image::resize
).Итак, вы можете просто сделать:
Вы также можете увидеть пример этого использования в
\Magento\VisualMerchandiser\Block\Adminhtml\Category\Merchandiser\Tile::getImageUrl
(Magento EE только я думаю)источник
$product
в / media нет только пути к файлу изображения.Я столкнулся с проблемой, когда
resize
метод не обрезал изображение по моим размерам, поэтому вам нужно вычислить значения обрезки сверху и снизу или слева и справа в зависимости от размера исходного изображения. Я использовал код из @Rakesh и изменил его, чтобы он проверял, является ли исходное изображение выше или шире, и соответственно обрезает его:источник
@Rakesh - я сделал то же самое, но это не работает для меня, есть ошибка
Вы можете помочь мне в этом.
Спасибо.
источник