Magento – Resize Scale Crop Image using Catalog helper

  • magento crop image
  • magento image crop

You was wondering if Magento can resize image with and without cropping image? Yes, Magento is powerful and you can resize image in many modes with different parameters. .You can either resize image with fixed height and auto width. Or, you can resize with fixed width and variable height. I will show you how to do it in Magento code

Fixed width of 600px

 

<?php echo $this->helper('catalog/image')->init($_product, 'image')
->constrainOnly(TRUE)
->keepAspectRatio(TRUE)
->keepFrame(FALSE)
->resize(600,null)
?>

Fixed height of 600px

<?php echo $this->helper('catalog/image')->init($_product, 'image')
->constrainOnly(TRUE)
->keepAspectRatio(TRUE)
->keepFrame(FALSE)
->resize(null,600)
?>

The following code will resize image proportionally and not let the image be greater than height and width specified.

<?php echo $this->helper('catalog/image')->init($_product, 'image')
->constrainOnly(TRUE)
->keepAspectRatio(TRUE)
->keepFrame(FALSE)
->resize(400,400)
?>

Description of the functions used above:-

Looking for improvement for your Magento Store?
Facebook Connector Extension
Product related article extension
Magento Offer popup on exit extension
Unlimited Slideshow Magento Extension
Light Checkout in One Step Magento Extension

constrainOnly(bool $flag)

Guarantee, that image picture will not be bigger, than it was. Applicable before calling resize()  It is false by default

keepAspectRatio(bool $flag)

Guarantee, that image picture width/height will not be distorted. Applicable before calling resize() It is true by default.

keepFrame(bool $flag)

Guarantee, that image will have dimensions, set in $width/$height. Applicable before calling resize() Not applicable, if keepAspectRatio(false).

You can resize image with Varien_Image class as well. This is most suitable when you are resizing image that is not related with catalog product.

// actual path of image
$imageUrl = Mage::getBaseDir('media').DS."myimage".DS.$post->getThumbnail();

// path of the resized image to be saved
// here, the resized image is saved in media/resized folder
$imageResized = Mage::getBaseDir('media').DS."myimage".DS."resized".DS.$post->getThumbnail();

// resize image only if the image file exists and the resized image file doesn't exist
// the image is resized proportionally with the width/height 135px
if (!file_exists($imageResized)&&file_exists($_imageUrl)) :
	$imageObj = new Varien_Image($_imageUrl);
	$imageObj->constrainOnly(TRUE);
	$imageObj->keepAspectRatio(TRUE);
	$imageObj->keepFrame(FALSE);
	$imageObj->resize(135, 135);
	$imageObj->save($imageResized);
endif;

You can use the resized image now as:

<img src="<?php echo Mage::getBaseUrl('media')."myimage/resized/".$post->getThumbnail() ?>" />

Another Scenario

Suppose, you have an image link. Now, you want to resize it. The image might be from any place. In this example, I am supposing the image link to be like http://localhost/magento/media/catalog/category/test_image.jpg

Now, I have to resize it. To do so, I will create a directory called resized inside media/catalog/category. And, I will save the resized file into the newly created resized directory.

// my sample image

$imageUrl = "http://localhost/magento/media/catalog/category/test_image.jpg";

// create folder
 if(!file_exists("./media/catalog/category/resized"))     mkdir("./media/catalog/category/resized",0777);

 // get image name
 $imageName = substr(strrchr($imageUrl,"/"),1);

 // resized image path (media/catalog/category/resized/IMAGE_NAME)
 $imageResized = Mage::getBaseDir('media').DS."catalog".DS."category".DS."resized".DS.$imageName;

 // changing image url into direct path
 $dirImg = Mage::getBaseDir().str_replace("/",DS,strstr($imageUrl,'/media'));

 // if resized image doesn't exist, save the resized image to the resized directory
 if (!file_exists($imageResized)&&file_exists($dirImg)) :
 $imageObj = new Varien_Image($dirImg);
 $imageObj->constrainOnly(TRUE);
 $imageObj->keepAspectRatio(TRUE);
 $imageObj->keepFrame(FALSE);
 $imageObj->resize(120, 120);
 $imageObj->save($imageResized);
 endif;

 $newImageUrl = Mage::getBaseUrl('media')."catalog/category/resized/".$imageName;

Displaying newly created resized image.

<img src="<?php echo Mage::getBaseUrl('media')."catalog/category/resized/".$newImageUrl ?>" />

You can check other function for Varien_Image at

http://docs.magentocommerce.com/Varien/elementindex_Varien_Image.html

Comments Closed