4

I want to resize category & product images for custom widget and I prefer Magento default function so I found following code to do so but I think it's for Magento 1

$imageObj = new Varien_Image ( $imageUrl );
$imageObj=$imageObj->constrainOnly ( true )
->keepAspectRatio ( true )
->keepFrame ( false )
->quality ( $quality )
->resize ( $width, $height )
->save ( $imageResized );

So I wish to know that does Magento 2 provide any function to resize,crop,scale any images including category,product etc.??

12

You can get all image related methods for category and product from helper file inside Magento_Catalog module core file,

vendor/magento/module-catalog/Helper/Image.php

List of methods are

  • resize()

  • List item

  • keepAspectRatio()

  • setQuality()
  • keepFrame()
  • keepTransparency()

    $_imagehelper = $this->helper('Magento\Catalog\Helper\Image');

<img src="<?php echo $_imagehelper->init($_product, 'thumbnail')->keepAspectRatio(true)->resize('400', '400'); ?>" />

this is to use in version 2.2. the image type was changed

<img src="<?php echo $_imagehelper->init($_product, 'product_base_image')->keepAspectRatio(true)->resize('400', '400'); ?>" />

For custom Image Resize section

Inside Block file,

protected $_filesystem ;
   protected $_imageFactory;
   public function __construct(            
        \Magento\Framework\Filesystem $filesystem,         
        \Magento\Framework\Image\AdapterFactory $imageFactory ,
        \Magento\Store\Model\StoreManagerInterface $storeManager,       
        ) {         
        $this->_filesystem = $filesystem;               
        $this->_imageFactory = $imageFactory; 
           $this->storeManager = $storeManager;        
        }

    // pass imagename, width and height
    public function resize($image, $width = null, $height = null)
    {
        $absolutePath = $this->_filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath('custom_module/posts/').$image;

        $imageResized = $this->_filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath('resized/'.$width.'/').$image;         
        //create image factory...
        $imageResize = $this->_imageFactory->create();         
        $imageResize->open($absolutePath);
        $imageResize->constrainOnly(TRUE);         
        $imageResize->keepTransparency(TRUE);         
        $imageResize->keepFrame(FALSE);         
        $imageResize->keepAspectRatio(TRUE);         
        $imageResize->resize($width,$height);  
        //destination folder                
        $destination = $imageResized ;    
        //save image      
        $imageResize->save($destination);         

        $resizedURL = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA).'resized/'.$width.'/'.$image;
        return $resizedURL;
  } 

Call inside template file $block->resize('img.jpg',300,300);

  • 1
    That is for product images only I guess, I also want to resize custom images and category images as well so any idea regarding that?? – Kaushal Suthar Sep 23 '16 at 9:54
  • please check updated answer – Rakesh Jesadiya Sep 23 '16 at 10:11
  • Well nice work around, But I simply want to pass the image url in function, I tried with above code but didn't worked for me can you help please?? – Kaushal Suthar Sep 23 '16 at 10:28
  • you have to modify content under $absolutePath in resize block and check it, currently we have display image saved location from folder, you have to change here. OR just set image url for $absolutePath and check – Rakesh Jesadiya Sep 23 '16 at 10:32
  • Didn't work for me – Kaushal Suthar Sep 23 '16 at 11:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.