Magento Coding Solutions

Resize Image in magento

 /****Image ReSize class in magento */

1) save this code as resize-class.php

<?php



   # ========================================================================#

   #

   #  Author:    Jarrod Oberto

   #  Version:     1.0

   #  Date:      17-Jan-10

   #  Purpose:   Resizes and saves image

   #  Requires : Requires PHP5, GD library.

   #  Usage Example:

   #                     include("classes/resize_class.php");

   #                     $resizeObj = new resize('images/cars/large/input.jpg');

   #                     $resizeObj -> resizeImage(150, 100, 0);

   #                     $resizeObj -> saveImage('images/cars/large/output.jpg', 100);

   #

   #

   # ========================================================================#





        Class resize

        {

            // *** Class variables

            private $image;

            private $width;

            private $height;

            private $imageResized;



            function __construct($fileName)

            {

                // *** Open up the file

                $this->image = $this->openImage($fileName);



                // *** Get width and height

                $this->width  = imagesx($this->image);

                $this->height = imagesy($this->image);

            }



            ## --------------------------------------------------------



            private function openImage($file)

            {

                // *** Get extension

                $extension = strtolower(strrchr($file, '.'));



                switch($extension)

                {

                    case '.jpg':

                    case '.jpeg':

                        $img = @imagecreatefromjpeg($file);

                        break;

                    case '.gif':

                        $img = @imagecreatefromgif($file);

                        break;

                    case '.png':

                        $img = @imagecreatefrompng($file);

                        break;

                    default:

                        $img = false;

                        break;

                }

                return $img;

            }



            ## --------------------------------------------------------



            public function resizeImage($newWidth, $newHeight, $option="auto")

            {

                // *** Get optimal width and height - based on $option

                $optionArray = $this->getDimensions($newWidth, $newHeight, $option);



                $optimalWidth  = $optionArray['optimalWidth'];

                $optimalHeight = $optionArray['optimalHeight'];





                // *** Resample - create image canvas of x, y size

                $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);

                imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);





                // *** if option is 'crop', then crop too

                if ($option == 'crop') {

                    $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);

                }

            }



            ## --------------------------------------------------------

           

            private function getDimensions($newWidth, $newHeight, $option)

            {



               switch ($option)

                {

                    case 'exact':

                        $optimalWidth = $newWidth;

                        $optimalHeight= $newHeight;

                        break;

                    case 'portrait':

                        $optimalWidth = $this->getSizeByFixedHeight($newHeight);

                        $optimalHeight= $newHeight;

                        break;

                    case 'landscape':

                        $optimalWidth = $newWidth;

                        $optimalHeight= $this->getSizeByFixedWidth($newWidth);

                        break;

                    case 'auto':

                        $optionArray = $this->getSizeByAuto($newWidth, $newHeight);

                        $optimalWidth = $optionArray['optimalWidth'];

                        $optimalHeight = $optionArray['optimalHeight'];

                        break;

                    case 'crop':

                        $optionArray = $this->getOptimalCrop($newWidth, $newHeight);

                        $optimalWidth = $optionArray['optimalWidth'];

                        $optimalHeight = $optionArray['optimalHeight'];

                        break;

                }

                return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);

            }



            ## --------------------------------------------------------



            private function getSizeByFixedHeight($newHeight)

            {

                $ratio = $this->width / $this->height;

                $newWidth = $newHeight * $ratio;

                return $newWidth;

            }



            private function getSizeByFixedWidth($newWidth)

            {

                $ratio = $this->height / $this->width;

                $newHeight = $newWidth * $ratio;

                return $newHeight;

            }



            private function getSizeByAuto($newWidth, $newHeight)

            {

                if ($this->height < $this->width)

                // *** Image to be resized is wider (landscape)

                {

                    $optimalWidth = $newWidth;

                    $optimalHeight= $this->getSizeByFixedWidth($newWidth);

                }

                elseif ($this->height > $this->width)

                // *** Image to be resized is taller (portrait)

                {

                    $optimalWidth = $this->getSizeByFixedHeight($newHeight);

                    $optimalHeight= $newHeight;

                }

                else

                // *** Image to be resizerd is a square

                {

                    if ($newHeight < $newWidth) {

                        $optimalWidth = $newWidth;

                        $optimalHeight= $this->getSizeByFixedWidth($newWidth);

                    } else if ($newHeight > $newWidth) {

                        $optimalWidth = $this->getSizeByFixedHeight($newHeight);

                        $optimalHeight= $newHeight;

                    } else {

                        // *** Sqaure being resized to a square

                        $optimalWidth = $newWidth;

                        $optimalHeight= $newHeight;

                    }

                }



                return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);

            }



            ## --------------------------------------------------------



            private function getOptimalCrop($newWidth, $newHeight)

            {



                $heightRatio = $this->height / $newHeight;

                $widthRatio  = $this->width /  $newWidth;



                if ($heightRatio < $widthRatio) {

                    $optimalRatio = $heightRatio;

                } else {

                    $optimalRatio = $widthRatio;

                }



                $optimalHeight = $this->height / $optimalRatio;

                $optimalWidth  = $this->width  / $optimalRatio;



                return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);

            }



            ## --------------------------------------------------------



            private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)

            {

                // *** Find center - this will be used for the crop

                $cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );

                $cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );



                $crop = $this->imageResized;

                //imagedestroy($this->imageResized);



                // *** Now crop from center to exact requested size

                $this->imageResized = imagecreatetruecolor($newWidth , $newHeight);

                imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);

            }



            ## --------------------------------------------------------



            public function saveImage($savePath, $imageQuality="100")

            {

                // *** Get extension

                $extension = strrchr($savePath, '.');

                   $extension = strtolower($extension);



                switch($extension)

                {

                    case '.jpg':

                    case '.jpeg':

                        if (imagetypes() & IMG_JPG) {

                            imagejpeg($this->imageResized, $savePath, $imageQuality);

                        }

                        break;



                    case '.gif':

                        if (imagetypes() & IMG_GIF) {

                            imagegif($this->imageResized, $savePath);

                        }

                        break;



                    case '.png':

                        // *** Scale quality from 0-100 to 0-9

                        $scaleQuality = round(($imageQuality/100) * 9);



                        // *** Invert quality setting as 0 is best, not 9

                        $invertScaleQuality = 9 - $scaleQuality;



                        if (imagetypes() & IMG_PNG) {

                             imagepng($this->imageResized, $savePath, $invertScaleQuality);

                        }

                        break;



                    // ... etc



                    default:

                        // *** No extension - No save.

                        break;

                }



                imagedestroy($this->imageResized);

            }





            ## --------------------------------------------------------



        }

?>
2)include("resize-class.php");

$resizeObj = new resize($newfile);
    $regular = Mage::getBaseDir() . DS .'images'. DS .'backgrounds'. DS .$time."_regular.".$extension;
    $thumbnail = Mage::getBaseDir() . DS .'images'. DS .'backgrounds'. DS .$time."_small.".$extension;
    $resizeObj -> resizeImage(500, 480, 'crop');
    $resizeObj -> saveImage($regular, 100);
    $resizeObj -> resizeImage(75, 75, 'crop');
    $resizeObj -> saveImage($thumbnail, 100);                //$post_data['swf']='swf/swf/'.$filename;

Uploade file ,image etc.. in magento custom module




Managedesign is a custom module
1) add browser in module
/app/code/local/Managedesign/Managedesign/Block/Adminhtml/Managedesign/Edit/Tab/form.php

$fieldset->addField('uploade_file', 'image', array(
                        'label' => Mage::helper('managedesign')->__('Image'),
                        'name' => 'uploade_file',
                        'note' => '(*.dst)',
                        ));   
                       
                       
2) add a field "uploade_file" in module table(Managedesign module Table).
3)Uplode file code in module controler(Managedesign controllers)
    /app/code/local/Managedesign/Managedesign/controllers/Adminhtml/ManagedesignController.php
   
    add this code in "public function saveAction()"
   
   
    if ($post_data) {

               
                    try {
                   
                   
                        /*Uploade Dth File */
                       
                            print_r($post_data);
                           
                            try{

                                if((bool)$post_data['uploade_file']['delete']==1) {

                                            $post_data['uploade_file']='';

                                }else {

                                        unset($post_data['uploade_file']);

                                        if (isset($_FILES)){

                                            if ($_FILES['uploade_file']['name']) {

                                                if($this->getRequest()->getParam("id")){
                                                    $model = Mage::getModel("managedesign/managedesign")->load($this->getRequest()->getParam("id"));
                                                    if($model->getData('uploade_file')){
                                                            $io = new Varien_Io_File();
                                                            $io->rm(Mage::getBaseDir('media').DS.implode(DS,explode('/',$model->getData('uploade_file'))));   
                                                    }
                                                }
                                                            $path = Mage::getBaseDir('media') . DS . 'managedesign' . DS .'managedesign'.DS;
                                                            $uploader = new Varien_File_Uploader('uploade_file');
                                                            $uploader->setAllowedExtensions(array('dst'));
                                                            $uploader->setAllowRenameFiles(false);
                                                            $uploader->setFilesDispersion(false);
                                                           
                                                            $extension = strtolower(pathinfo($_FILES['uploade_file']['name'], PATHINFO_EXTENSION));
                                                            $file_name = $time.".".$extension;
                                                            $_FILES['uploade_file']['name'] = $file_name;
                                                            $destFile = $path.$_FILES['uploade_file']['name'];
                                                            $filename = $uploader->getNewFileName($destFile);
                                                            $uploader->save($path, $filename);                                   
                                                            $post_data['uploade_file']='managedesign/managedesign/'.$filename;
                                                            $filepath = $destFile;   
                                                            list($width, $height, $type, $attr) = getimagesize($filepath);   
                                                            $post_data['height'] = $height;
                                                            $post_data['width']    = $width;
                                                            $newfile = Mage::getBaseDir() . DS .'dst-files'. DS .$_FILES['uploade_file']['name'];    
                                                            copy($destFile, $newfile);
                                                           
                                                       
                                                           
                                            }
                                        }
                                    }

                            } catch (Exception $e) {
                                    Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                                    $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
                                    return;
                            }
                        //save image
                       
                       
                        /* End Code */
    4) create source and destination folder and give the read/write permission