Estou usando o Magento 2 CE versão 2.1.0
Eu tenho módulo personalizado com campo de imagem. Quando é carregado, quero imagens de tamanhos diferentes. No produto, temos Imagem em miniatura, Imagem da lista e Imagem da página de detalhes do produto.
Capaz de fazer upload de 1 imagem sem redimensionar.
Estou usando o código abaixo para redimensionar a imagem, mas está fornecendo o URL da imagem do produto. Não é o meu módulo personalizado.
\ app \ code \ Custom \ Module \ Block \ 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;
}
Fornece abaixo o URL http: //localhost/magento2/pub/static/frontend/Magento/luma/en_US/Magento_Catalog/images/product/placeholder/.jpg
Minha imagem é armazenada aqui: \magento2\pub\media\custom_module\posts\image
.
Como posso redimensionar a imagem com esse caminho e como posso salvar / recuperar uma imagem de tamanho diferente?
fonte
A resposta aceita não considera o cache da imagem para melhorar o desempenho. Você não precisa redimensionar e substituir a imagem sempre que solicitada. A abordagem a seguir salva a imagem redimensionada em uma pasta "cache", para que chamadas sucessivas retornem a imagem do cache. O método está contido em um auxiliar (não em um bloco), para que você possa chamá-lo de qualquer modelo que desejar:
app / code / Vendor / Namespace / Helper / Image.php
Agora, a partir de qualquer modelo .phtml, você pode chamar o método assim:
fonte
if (!$this->_fileExists($path . $image)) {
paraif (!$this->_fileExists($path . $image) && $this->_fileExists($mediaFolder . $image)) {
\Magento\Catalog\Helper\Image
.Receio que você não precise criar novas classes para redimensionar suas imagens, já que os ajudantes do Magento já as possuem (consulte
\Magento\Catalog\Helper\Image::resize
).Então, você pode fazer:
Você também pode ver um exemplo desse uso em
\Magento\VisualMerchandiser\Block\Adminhtml\Category\Merchandiser\Tile::getImageUrl
(apenas no Magento EE)fonte
$product
apenas o caminho para o arquivo de imagem em / media.Eu encontrei um problema em que o
resize
método não recortava a imagem nas minhas dimensões, então você precisa calcular os valores de recorte de cima e de baixo ou esquerda e direita, dependendo do tamanho da imagem original. Usei o código do @Rakesh e o modifiquei para verificar se a imagem original é mais alta ou mais larga e corta de acordo:fonte
@Rakesh - Eu fiz o mesmo, mas não está funcionando para mim, há um erro
você pode me ajudar nisso?
Obrigado.
fonte