protected function _processImage($gImage = null)
 {
     list($smallThumbWidth, $smallThumbHeight) = array($this->_smallThumbWidth, $this->_smallThumbHeight);
     list($thumbWidth, $thumbHeight) = array($this->_thumbWidth, $this->_thumbHeight);
     $thumbAspectRatio = $thumbWidth / $thumbHeight;
     if (is_null($gImage)) {
         $gImage = new Varien_Object();
     }
     if ($gImage->getUnirgyImgFlag()) {
         return $gImage;
     }
     $_product = $this->getProduct();
     if ($_product->getIsProductListFlag() || $gImage->getOnlyMainUrlFlag()) {
         $imageAttr = $_product->getIsProductListFlag() ? 'small_image' : 'image';
         if ('thumb' == $gImage->getOnlyMainUrlFlag()) {
             $gImage->setThumb($this->helper('catalog/image')->init($_product, $imageAttr, $gImage->getFile())->setQuality(100)->resize($smallThumbWidth, $smallThumbHeight)->__toString());
             $gImage->setThumbSize(array($smallThumbWidth, $smallThumbHeight));
             $gImage->setMedium($gImage->getThumb());
             $gImage->setMediumSize($gImage->getThumbSize());
             $gImage->setUnirgyImgFlag(true);
         } else {
             $gImage->setMedium($this->helper('catalog/image')->init($_product, $imageAttr, $gImage->getFile())->setQuality(100)->resize($thumbWidth, $thumbHeight)->__toString());
             $gImage->setMediumSize(array($thumbWidth, $thumbHeight));
             $gImage->setUnirgyImgFlag(true);
         }
         return $gImage;
     }
     $imgHlp = $this->helper('catalog/image')->init($_product, 'image', $gImage->getFile())->setQuality(100);
     $imgHlp->__toString();
     list($imgWidth, $imgHeight) = $imgHlp->getOriginalSizeArray();
     if (!$imgHeight) {
         $imgHeight = 1;
     }
     $maxDim = max($imgWidth, $imgHeight);
     if ($maxDim > 2000) {
         $resizeRatio = $maxDim / 2000;
         $imgWidth = round($imgWidth / $resizeRatio);
         $imgHeight = round($imgHeight / $resizeRatio);
     }
     $imgAspectRatio = $imgWidth / $imgHeight;
     if ($imgAspectRatio > $thumbAspectRatio) {
         $imgHeight = round($imgWidth / $thumbAspectRatio);
         $zoomValue = $imgWidth / $thumbWidth;
     } else {
         $imgWidth = round($imgHeight * $thumbAspectRatio);
         $zoomValue = $imgHeight / $thumbHeight;
     }
     $midZoomValue = 1 + ($zoomValue - 1) / 2;
     $midImgWidth = round($thumbWidth * $midZoomValue);
     $midImgHeight = round($thumbHeight * $midZoomValue);
     if ($imgWidth < $thumbWidth || $imgHeight < $thumbHeight) {
         $midImgWidth = $imgWidth = $thumbWidth;
         $midImgHeight = $imgHeight = $thumbHeight;
     }
     list($img, $midImg, $medium, $thumb) = array($this->helper('catalog/image')->init($_product, 'image', $gImage->getFile())->setQuality(100)->resize($imgWidth, $imgHeight)->__toString(), $this->helper('catalog/image')->init($_product, 'image', $gImage->getFile())->setQuality(100)->resize($midImgWidth, $midImgHeight)->__toString(), $this->helper('catalog/image')->init($_product, 'image', $gImage->getFile())->setQuality(100)->resize($thumbWidth, $thumbHeight)->__toString(), $this->helper('catalog/image')->init($_product, 'image', $gImage->getFile())->setQuality(100)->resize($smallThumbWidth, $smallThumbHeight)->__toString());
     $gImage->setMidImg($midImg);
     $gImage->setMidImgSize(array($midImgWidth, $midImgHeight));
     $gImage->setImg($img);
     $gImage->setImgSize(array($imgWidth, $imgHeight));
     $gImage->setMedium($medium);
     $gImage->setMediumSize(array($thumbWidth, $thumbHeight));
     $gImage->setThumb($thumb);
     $gImage->setThumbSize(array($smallThumbWidth, $smallThumbHeight));
     $gImage->setUnirgyImgFlag(true);
     return $gImage;
 }