Estoy usando Magento 2 CE Versión 2.1.0
Tengo un módulo personalizado con campo de imagen. Cuando se carga, quiero imágenes de diferentes tamaños en cuanto al producto que tenemos Imagen en miniatura, Imagen de lista e Imagen de página de detalles del producto.
Capaz de cargar 1 imagen sin cambiar el tamaño.
Estoy usando el siguiente código para cambiar el tamaño de la imagen, pero proporciona la URL de la imagen del producto. No es mi 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;
}
Da a continuación la URL http: //localhost/magento2/pub/static/frontend/Magento/luma/en_US/Magento_Catalog/images/product/placeholder/.jpg
Mi imagen se almacena aquí: \magento2\pub\media\custom_module\posts\image
.
¿Cómo puedo cambiar el tamaño de la imagen con esta ruta y cómo puedo guardar / recuperar imágenes de diferentes tamaños?
fuente
La respuesta aceptada no considera el almacenamiento en caché de la imagen para mejorar el rendimiento. No necesita cambiar el tamaño y sobrescribir la imagen cada vez que se solicita. El siguiente enfoque guarda la imagen redimensionada en una carpeta "caché" para que las llamadas sucesivas devuelvan la imagen del caché. El método está contenido en un asistente (no en un bloque) para que pueda llamarlo desde cualquier plantilla que desee:
app / code / Vendor / Namespace / Helper / Image.php
Ahora desde cualquier plantilla .phtml puedes llamar al método de esta manera:
fuente
if (!$this->_fileExists($path . $image)) {
if (!$this->_fileExists($path . $image) && $this->_fileExists($mediaFolder . $image)) {
\Magento\Catalog\Helper\Image
.Me temo que no necesita crear nuevas clases para cambiar el tamaño de sus imágenes, ya que los ayudantes de Magento ya lo tienen (ver
\Magento\Catalog\Helper\Image::resize
).Entonces, solo puedes hacer:
También puede ver un ejemplo de este uso en
\Magento\VisualMerchandiser\Block\Adminhtml\Category\Merchandiser\Tile::getImageUrl
(Magento EE, supongo)fuente
$product
única ruta al archivo de imagen en / media.Me encontré con un problema en el que el
resize
método no recortaba la imagen a mis dimensiones, por lo que debe calcular los valores de recorte de arriba a abajo o de izquierda a derecha, según el tamaño de la imagen original. Usé el código de @Rakesh y lo modifiqué para que compruebe si la imagen original es más alta o más ancha y recorta en consecuencia:fuente
@Rakesh: he hecho lo mismo pero no funciona, hay un error
Puedes ayudarme en esto.
Gracias.
fuente