2017-02-01 31 views
-1

Как добавить функцию поворота в мой файл конфигурации, не могу понять, где добавить и как, мой код здесь. Этот код из СЦХ, его работы, необходимо обнаружить и добавить Exif АВТОПОВ функции, если ориентация изображения неправильно:Как определить ориентацию EXIF ​​и поворот изображения с помощью ImageMagick в пользовательском файле конфигурации CMS?

# ImageMagick 
 
    
 
    private function saveFileIM() 
 
    { 
 
     if($this->imShell) { 
 
      $filename_orig = escapeshellarg($this->img['orig_filename']); 
 
      $filename_dest = escapeshellarg($this->img['filename']); 
 
     } 
 
     
 
     do{ 
 
     
 
     // crop по указанным координатам и размерам 
 
     if(! empty($this->img['crop_width']) || ! empty($this->img['crop_height'])) { 
 
      if($this->imShell) { 
 
       // not implemented 
 
      } else { 
 
       $this->im->cropImage($this->img['orig_width'], $this->img['orig_height'], $this->img['src_x'], $this->img['src_y']); 
 
      } 
 
     } 
 
      
 
     // если пропорции будут сохранятся 
 
     if($this->img['autofit']) 
 
     { 
 
      // указаны значения и высоты и ширины, обрезать изображение точно по размерам 
 
      if($this->img['height']<=0 && $this->img['width']<=0) { 
 
       $this->error('no_th_size'); 
 
       break; 
 
      } 
 
      
 
      if($this->imShell) 
 
      { 
 
       if(! $this->img['height']) 
 
       { 
 
        // не указана высота thumbnail'a пропорциональное изображение по ширине 
 
        if(exec($this->imPath.'convert '.$filename_orig.' 
 
          -resize '.$this->img['width'].'x 
 
          -quality '.$this->img['quality'].' '.$filename_dest)) 
 
         $this->error('im_prop_w_err'); 
 
       } 
 
       else if(! $this->img['width']) 
 
       { 
 
        // не указана ширина thumbnail'a пропорциональное изображение по высоте 
 
        if(exec($this->imPath.'convert '.$filename_orig.' 
 
          -resize x'.$this->img['height'].' 
 
          -quality '.$this->img['quality'].' '.$filename_dest)) 
 
         $this->error('im_prop_h_err'); 
 
       }   
 
       else 
 
       { 
 
        if($this->img['autofit_nocrop']) { 
 
         // not implemented 
 
        } 
 

 
        // проверяем какая сторона ужимается меньше всего 
 
        $nWidthDif = $this->img['width']/$this->img['orig_width']; 
 
        $nHeightDif = $this->img['height']/$this->img['orig_height']; 
 
        // сжимаем пропорционально по ширине или по высоте (по меньшему сжатию) сторону, коэф сжатия которой больше обрезаем 
 
        if($nWidthDif > $nHeightDif) 
 
        { 
 
         $this->cropHeight($nWidthDif, $this->img['crop_v']); 
 
         if(exec($this->imPath.'convert '.$filename_orig.' 
 
           -resize '.$this->img['width'].'x 
 
           -quality '.$this->img['quality'].' '.$filename_dest)) 
 
          $this->error('im_prop_h_err'); 
 
        } 
 
        else       
 
        { 
 
         $this->cropWidth($nHeightDif, $this->img['crop_h']); 
 
         if(exec($this->imPath.'convert '.$filename_orig.' 
 
           -resize x'.$this->img['height'].' 
 
           -quality '.$this->img['quality'].' '.$filename_dest)) 
 
          $this->error('im_prop_w_err'); 
 
        } 
 
        
 
        // обрезка изображения до точного размера 
 
        if(exec($this->imPath.'convert '.$filename_dest.' 
 
           -gravity '.$this->img['gravity'].' 
 
           -quality 100 
 
           -crop '.$this->img['width'].'x'.$this->img['height'].'+0+0 +repage 
 
           '.$filename_dest)) 
 
         $this->error('im_croping_err'); 
 
       } 
 
      } else { 
 
       if(! $this->img['height']) { 
 
        if(!$this->im->thumbnailImage($this->img['width'], 0)) 
 
          $this->error('im_prop_w_err'); 
 
       } else if(! $this->img['width']) { 
 
        if(! $this->im->thumbnailImage(0, $this->img['height'])) 
 
          $this->error('im_prop_h_err'); 
 
       } else { 
 
        if($this->img['autofit_nocrop']) 
 
        { 
 
         if(! empty($this->img['autofit_nocrop_bg'])) { 
 
          $bg_clr = $this->img['autofit_nocrop_bg']; // формат: 0xFFFFFF 
 
          // 
 
         } 
 
         if(! $this->im->thumbnailImage($this->img['width'], $this->img['height'], true)) 
 
          $this->error('im_croping_err'); 
 
        } else { 
 
         // фиксированной ширины и высоты, только center-center 
 
         if(! $this->im->cropThumbnailImage($this->img['width'], $this->img['height'])) 
 
          $this->error('im_croping_err'); 
 
         $this->im->setImagePage(0, 0, 0, 0); // фикс для gif 
 
        } 
 
       } 
 
      } 
 
     } 
 
     // ужимать не сохраняя пропорции 
 
     else 
 
     { 
 
      if($this->imShell) 
 
      { 
 
       if(! $this->img['height'] && $this->img['width']>0) 
 
       { 
 
        /* не указана высота thumbnaila (выставляем высоту оригинального изображения) */ 
 
        if(exec($this->imPath.'convert '.$filename_orig.' 
 
         -scale '.$this->img['width'].'x'.$this->img['orig_height'].'! 
 
         -quality '.$this->img['quality'].' '.$filename_dest)) 
 
        $this->error('im_unprop_h_err'); 
 
       }        
 
       else if(! $this->img['width']&& $this->img['height']>0) 
 
       { 
 
        /* не указана ширина thumbnaila (выставляем ширину оригинального изображения) */  
 
        if(exec($this->imPath.'convert '.$filename_orig.' 
 
         -scale '.$this->img['orig_width'].'x'.$this->img['height'].'! 
 
         -quality '.$this->img['quality'].' '.$filename_dest)) 
 
        $this->error('im_unprop_w_err'); 
 
       }        
 
       else{ 
 
        if(exec($this->imPath.'convert '.$filename_orig.' 
 
         -scale '.$this->img['width'].'x'.$this->img['height'].'! 
 
         -quality '.$this->img['quality'].' '.$filename_dest)) 
 
        $this->error('im_unprop_err'); 
 
       } 
 
      } else { 
 
       if(! $this->im->thumbnailImage($this->img['width'], $this->img['height'])) 
 
        $this->error('im_unprop_err'); 
 
      } 
 
     } 
 
     
 
     } while(false); 
 
              
 
     // нанесение watermark 
 
     if($this->img['watermark'] && $this->img['watermark_src']) 
 
     { 
 
      $this->watermarkPrintIM(); 
 
     } 
 
     
 
     // закругление углов 
 
     if($this->img['round_corners']) 
 
     { 
 
      $this->roundCornersIM($this->img['filename'], $this->img['round_corners_color'], $this->img['round_corners_radius'], $this->img['round_corners_rate']); 
 
     } 
 

 
     if(! $this->imShell) { 
 
      $this->im->writeImage($this->img['filename']); 
 
     } 
 
     
 
     $this->clearOriginalImage(); 
 
    } 
 
     
 
    /** 
 
    * Приводим положение картинки к формату ImageMagick 
 
    * @param mixed $vertical - положение по вертикали 
 
    * @param mixed $horizontal - положение по горизонтали 
 
    * @param mixed $pos 
 
    */ 
 
    private function convertDimentionsIM($vertical, $horizontal, $pos = false) 
 
    { 
 
     if(! empty($pos)) 
 
     { 
 
      $i_w = $pos['i_w']; 
 
      $i_h = $pos['i_h']; 
 
      $t_w = $pos['t_w']; 
 
      $t_h = $pos['t_h']; 
 
      $paddingV = $pos['p_v']; 
 
      $paddingH = $pos['p_h']; 
 
       
 
      $x_right = $i_w - $t_w - $paddingH; 
 
      $x_center = round(($i_w - $t_w)/2); 
 
      $y_center = round(($i_h - $t_h)/2); 
 
      $y_bottom = $i_h - $t_h - $paddingV; 
 
       
 
      $gravity = array(   
 
       'top-left'  => array($paddingH, $paddingV), // x - horizontal, y- vertical    
 
       'top-center' => array($x_center, $paddingV), 
 
       'top-right'  => array($x_right, $paddingV), 
 
       'center-left' => array($paddingH, $y_center), 
 
       'center-center' => array($x_center, $y_center), 
 
       'center-right' => array($x_right, $y_center), 
 
       'bottom-left' => array($paddingH, $y_bottom), 
 
       'bottom-center' => array($x_center, $y_bottom), 
 
       'bottom-right' => array($x_right, $y_bottom), 
 
      ); 
 
      return $gravity[$vertical.'-'.$horizontal]; 
 
     } else { 
 
      $gravity = array(
 
       'top-left'  => array('NorthWest', IMagick::GRAVITY_NORTHWEST), 
 
       'top-center' => array('North',  IMagick::GRAVITY_NORTH), 
 
       'top-right'  => array('NorthEast', IMagick::GRAVITY_NORTHEAST), 
 
       'center-left' => array('West',  IMagick::GRAVITY_WEST), 
 
       'center-center' => array('Center', IMagick::GRAVITY_CENTER), 
 
       'center-right' => array('East',  IMagick::GRAVITY_EAST), 
 
       'bottom-left' => array('SouthWest', IMagick::GRAVITY_SOUTHWEST), 
 
       'bottom-center' => array('South',  IMagick::GRAVITY_SOUTH), 
 
       'bottom-right' => array('SouthEast', IMagick::GRAVITY_SOUTHEAST), 
 
      ); 
 
      return $gravity[$vertical.'-'.$horizontal][ ($this->imShell ? 0 : 1) ]; 
 
     } 
 
    } 
 

 
    /** 
 
    * Наносим watermark нa изображение с помощью Image Magick 
 
    */ 
 
    private function watermarkPrintIM() 
 
    { 
 
     $sGravity = $this->convertDimentionsIM($this->img['watermark_pos_y'], $this->img['watermark_pos_x']); 
 

 
     $sTmpWatermarkFile = $this->imTmpPath.'def_w_mark.png'; 
 
     
 
     // на основе изображения 
 
     if(file_exists($this->img['watermark_src'])) 
 
     { 
 
      /** 
 
      * если указано что wm надо ужимать вместе с картинкой 
 
      * то получаем размеры загружаемого wm 
 
      * и уменьшаем его пропорционально с основным изображением 
 
      */ 
 
      if($this->imShell) 
 
      { 
 
       if($this->img['watermark_resizable']) 
 
       { 
 
        $sParam = exec($this->imPath.'identify '.$this->img['watermark_src']); 
 
        $aParam = split(' ', $sParam); 
 
        $aSize = split('x',$aParam[2]); 
 
        $nWMwidth = intval($aSize[0] * $this->img['coef_width']); 
 
        $nWMheight = intval($aSize[1] * $this->img['coef_height']); 
 
        if(exec($this->imPath.'convert '.$this->img['watermark_src'].' -scale '.$nWMwidth.'x'.$nWMheight.' -quality '.$this->img['quality'].' '.$sTmpWatermarkFile)) 
 
         $this->error('im_wmresize_err'); 
 
       } 
 
       
 
       // накладываем wm на thumbnail 
 
       if(exec($this->imPath.'composite -dissolve 100 -gravity '.$sGravity.' -geometry +'.$this->img['watermark_padding_h'].'+'.$this->img['watermark_padding_v'].' '.$sTmpWatermarkFile.' '. $this->img['filename'].' '.$this->img['filename'])) 
 
        $this->error('im_wmadd_err'); 
 
       
 
       // накладываем wm на оригинал 
 
       if($this->img['watermark_on_original']) 
 
       { 
 
        if(exec($this->imPath.'composite -dissolve 100 -gravity '.$sGravity.' -geometry +'.$this->img['watermark_padding_h'].'+'.$this->img['watermark_padding_v'].' '. $this->img['watermark_src'] .' '. $this->img['orig_filename'].' '.$this->img['orig_filename'])) 
 
         $this->error('im_wmorig_err'); 
 
       } 
 
      } 
 
      else 
 
      { 
 
       $wm = new Imagick($this->img['watermark_src']); 
 
       $wmSize = array($wm->getImageWidth(), $wm->getImageHeight()); 
 
       if($this->img['watermark_resizable']) { 
 
        $wmSize[0] = intval($wmSize[0] * $this->img['coef_width']); //width 
 
        $wmSize[1] = intval($wmSize[1] * $this->img['coef_height']); //height 
 
        $wm->thumbnailImage($wmSize[1], $wmSize[0]); 
 
       } 
 

 
       // накладываем wm на thumbnail 
 
       $aGravity = $this->convertDimentionsIM($this->img['watermark_pos_y'], $this->img['watermark_pos_x'], 
 
          array('t_w'=>$wmSize[0],'t_h'=>$wmSize[1], 
 
            'i_w'=>$this->im->getImageWidth(),'i_h'=>$this->im->getImageHeight(), 
 
            'p_v'=>$this->img['watermark_padding_v'], 'p_h'=>$this->img['watermark_padding_h'])); 
 
       
 
       // накладывает watermark на thumbnail 
 
       if(! $this->im->compositeImage($wm, Imagick::COMPOSITE_OVER, $aGravity[0], $aGravity[1])) 
 
        $this->error('im_wmadd_err'); 
 
       
 
       // накладываем wm на оригинал 
 
       if($this->img['watermark_on_original']) 
 
       {     
 
        $imSrc = new Imagick($this->img['orig_filename']); 
 
        
 
        $aGravitySrc = $this->convertDimentionsIM($this->img['watermark_pos_y'], $this->img['watermark_pos_x'], 
 
           array('t_w'=>$wmSize[0],'t_h'=>$wmSize[1], 
 
             'i_w'=>$imSrc->getImageWidth(),'i_h'=>$imSrc->getImageHeight(), 
 
             'p_v'=>$this->img['watermark_padding_v'], 'p_h'=>$this->img['watermark_padding_h'])); 
 

 
        if(! $imSrc->compositeImage($wm, Imagick::COMPOSITE_OVER, $aGravitySrc[0], $aGravitySrc[1])) 
 
         $this->error('im_wmorig_err');      
 
        else { 
 
         $imSrc->writeImage($this->img['orig_filename']); 
 
        } 
 
        $imSrc->destroy(); 
 
       } 
 
       
 
       $wm->destroy();    
 
      } 
 
     } 
 
     else // на основе текста 
 
     { 
 
      //задаем цвет шрифта wm в формате #ffffff 
 
      $sText  = $this->img['watermark_src']; 
 
      $sTextColor = $this->img['watermark_font_color']; 
 
      $sFont  = $this->sFontDir.'/'.$this->img['watermark_font']; 
 
      $nFontSize = $this->img['watermark_font_size']; 
 
      $nCoef = 1; 
 
      if($this->img['watermark_resizable']) { 
 
       // размер шрифта уменьшается пропорционально картинке 
 
       $nCoef = ($this->img['coef_width']>$this->img['coef_height'] ? $this->img['coef_height'] : $this->img['coef_width']); 
 
       $nFontSize = round($nCoef * $nFontSize); 
 
      } 
 

 
      if($this->imShell) 
 
      {  
 
       // создает изображение png из текста переданного как wm (размер шрифта не изменяется) 
 
       if(exec($this->imPath.'convert -background "none" -fill "'.$sTextColor.'" -font '.$sFont.' -pointsize '.($nFontSize).' label:"'.addslashes($sText).'" '.$sTmpWatermarkFile)) 
 
        $this->error('im_wmorig_err'); 
 
       
 
       // накладывает watermark на thumbnail 
 
       if(exec($this->imPath.'composite -dissolve 100 -gravity '.$sGravity.' -geometry +'.($this->img['watermark_padding_h'] * $nCoef).'+'.$this->img['watermark_padding_v']*$nCoef.' '.$sTmpWatermarkFile.' '.$this->img['filename'] .' '.$this->img['filename'])) 
 
        $this->error('im_wmcreate_err'); 
 

 
       // накладывает watermark на оригинал изображения 
 
       if($this->img['watermark_on_original']) { 
 
        if(exec($this->imPath.'composite -dissolve 100 -gravity '.$sGravity.' -geometry +'.$this->img['watermark_padding_h'].'+'.$this->img['watermark_padding_v'].' '.$sTmpWatermarkFile.' '. $this->img['orig_filename'].' '.$this->img['orig_filename'])) 
 
         $this->error('im_wmorig_err'); 
 
       } 
 
      } 
 
      else 
 
      { 
 
       $wmText = new ImagickDraw(); 
 
       $wmText->setGravity(IMagick::GRAVITY_CENTER); 
 
       $wmText->setFont($sFont); 
 
       $wmText->setFontSize($nFontSize); 
 
       $wmText->setFillColor($sTextColor); 
 
       
 
       $wm = new Imagick(); 
 
       $wmTextProps = $wm->queryFontMetrics($wmText, $sText); 
 
       $wmW = intval($wmTextProps['textWidth']); 
 
       $wmH = intval($wmTextProps['textHeight']); 
 
       $wm->newImage($wmW, $wmH, new ImagickPixel('transparent'), 'png'); 
 
       $wm->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT); 
 
       $wm->annotateImage($wmText, 0, 0, 0, $sText); 
 
       
 
       $aGravity = $this->convertDimentionsIM($this->img['watermark_pos_y'], $this->img['watermark_pos_x'], 
 
          array('t_w'=>$wmW,'t_h'=>$wmH, 
 
            'i_w'=>$this->im->getImageWidth(),'i_h'=>$this->im->getImageHeight(), 
 
            'p_v'=>$this->img['watermark_padding_v'], 'p_h'=>$this->img['watermark_padding_h'])); 
 
       
 
       // накладывает watermark на thumbnail 
 
       //$this->im->annotateImage($wmText, $aGravity[0], $aGravity[1], 0, $sText); 
 
       
 
       if(! $this->im->compositeImage($wm, Imagick::COMPOSITE_OVER, $aGravity[0], $aGravity[1])) 
 
        $this->error('im_wmcreate_err'); 
 

 
       // накладывает watermark на оригинал изображения 
 
       if($this->img['watermark_on_original']) 
 
       { 
 
        $imSrc = new Imagick($this->img['orig_filename']); 
 
        
 
        $aGravitySrc = $this->convertDimentionsIM($this->img['watermark_pos_y'], $this->img['watermark_pos_x'], 
 
           array('t_w'=>$wmW,'t_h'=>$wmH, 
 
             'i_w'=>$imSrc->getImageWidth(),'i_h'=>$imSrc->getImageHeight(), 
 
             'p_v'=>$this->img['watermark_padding_v'], 'p_h'=>$this->img['watermark_padding_h'])); 
 

 
        if(! $imSrc->compositeImage($wm, Imagick::COMPOSITE_OVER, $aGravitySrc[0], $aGravitySrc[1])) 
 
         $this->error('im_wmorig_err'); 
 
        else { 
 
         $imSrc->writeImage($this->img['orig_filename']); 
 
        } 
 
        $imSrc->destroy(); 
 
       } 
 
       
 
       $wmText->destroy(); 
 
       $wm->destroy(); 
 
      } 
 
     } 
 
      
 
     // удаление временного файла с wm 
 
     $this->img['orig_filename'] = $this->img['src']; 
 
     if(file_exists($sTmpWatermarkFile)) { 
 
      unlink($sTmpWatermarkFile); 
 
     } 
 
    } 
 
    
 
    /** 
 
    * Создание закругленных уголков с помощью Image Magick 
 
    */ 
 
    private function roundCornersIM($filename, $cornercolor, $radius=5, $rate=5) 
 
    { 
 
     // Если png/gif тогда углы прозрачные 
 
     if($this->img['format'] == IMAGETYPE_GIF || $this->img['format'] == IMAGETYPE_PNG) { 
 
      $cornercolor = false; 
 
     } 
 
     
 
     if($radius<=0) return false; 
 
     if($radius > 100) $radius = 100; 
 
     if($rate <=0) $rate = 5; 
 
     else if($rate > 20) $rate = 20; 
 
       
 
     $width = $this->img['width']; 
 
     $height = $this->img['height']; 
 
     $radius = ($width<=$height)?((($width/100)*$radius)/2):((($height/100)*$radius)/2); 
 

 
     if($cornercolor === false) 
 
     { 
 
      $sOldName = $filename; 
 
      $sNewName = $filename; 
 
      if($this->img['format']!==IMAGETYPE_PNG) { 
 
       $nLength = strrpos($filename,'.'); 
 
       $sNewName = substr($filename,0,$nLength).'.png'; 
 
      } 
 
      
 
      if($this->imShell) 
 
      { 
 
       // если углы прозрачные закругляем уголки без заливки цветом 
 
       $cornercolor = 'transparent'; 
 
       if(exec($this->imPath.'convert "'.$sOldName.'" -border 0 -format "roundrectangle 0,0 %[fx:w],%[fx:h] '.$radius.','.$radius.'" info: > '.$this->imTmpPath.'tmp.mvg')) 
 
        $this->error('no_rouncorners'); 
 
       if(exec($this->imPath.'convert "'.$sOldName.'" -border 0 -matte -channel RGBA -threshold -1 -background '.$cornercolor.' -fill none -strokewidth 0 -draw "@'.$this->imTmpPath.'tmp.mvg" '.$this->imTmpPath.'__overlay.png')) 
 
        $this->error('no_rouncorners'); 
 
       if(exec($this->imPath.'convert "'.$sOldName.'" -border 0 -matte -channel RGBA -threshold -1 -background '.$cornercolor.' -fill white -strokewidth 0 -draw "@'.$this->imTmpPath.'tmp.mvg" '.$this->imTmpPath.'__mask.png ')) 
 
        $this->error('no_rouncorners'); 
 
        
 
       if(exec($this->imPath.'convert "'.$sOldName.'" -matte -bordercolor '.$cornercolor.' -border 0 '.$this->imTmpPath.'__mask.png -compose DstIn -composite '.$this->imTmpPath.'__overlay.png -compose Over -composite -quality 95 "'.$sNewName.'" ')) 
 
        $this->error('no_rouncorners'); 
 
        
 
       if($sOldName != $sNewName) { 
 
        unlink($sOldName); 
 
        rename($sNewName, $sOldName); 
 
       } 
 
       unlink($this->imTmpPath.'__mask.png'); 
 
       unlink($this->imTmpPath.'__overlay.png'); 
 
      } else {   
 
       $this->im->setImageFormat('png'); 
 
       $this->im->roundCorners($radius, $radius); 
 
      } 
 
     } 
 
     else 
 
     { 
 
      if($this->imShell) 
 
      { 
 
       // если углы не прозрачные закругляем уголки и заливаем из выставленным цветом 
 
       if(exec($this->imPath.'convert "'.$filename.'" -border 0 -format "fill '.$cornercolor.' rectangle 0,0 %[fx:w],%[fx:h]" info: > '.$this->imTmpPath.'tmp.mvg')) 
 
        $this->error('no_rouncorners'); 
 
       if(exec($this->imPath.'convert "'.$filename.'" -matte -channel RGBA -threshold -1 -draw "@'.$this->imTmpPath.'tmp.mvg" PNG:'.$this->imTmpPath.'__underlay.png')) 
 
        $this->error('no_rouncorners'); 
 
       if(exec($this->imPath.'convert '.$this->imTmpPath.'__underlay.png ("'.$filename.'" (+clone -threshold -1 -draw "fill black polygon 0,0 0,'.$radius.' '.$radius.',0 fill white circle '.$radius.','.$radius.' '.$radius.',0" (+clone -flip) -compose Multiply -composite (+clone -flop) -compose Multiply -composite -blur 1x1) +matte -compose CopyOpacity -composite) -matte -compose over -composite "'.$filename.'"')) 
 
        $this->error('no_rouncorners'); 
 
       
 
       unlink($this->imTmpPath.'__underlay.png'); 
 
      } else { 
 
       $this->im->setImageFormat('png'); 
 
       $this->im->roundCorners($radius, $radius); 
 
//    $bg = new Imagick(); 
 
//    $bg->newImage($this->im->getImageWidth(), $this->im->getImageHeight(), new ImagickPixel($cornercolor)); 
 
//    $bg->compositeImage($this->im, Imagick::COMPOSITE_OVER, 0, 0); 
 
//    $this->im->setImage($bg); 
 
      } 
 
     } 
 
     
 
     if(file_exists($this->imTmpPath.'tmp.mvg')) { 
 
      unlink($this->imTmpPath.'tmp.mvg'); 
 
     } 
 
     
 
     $this->img['orig_filename'] = $this->img['src']; 
 
     
 
     return $this->errors->no(); 
 
    } 
 

 
    public function getErrors() 
 
    { 
 
     return $this->errors->show(); 
 
    } 
 
      
 
    /** 
 
    * Устанавливает лимит оперативной памяти 
 
    * @param int $nSize - объем памяти в мегабайтах 
 
    */ 
 
    public function setMemoryLimit($nSize) 
 
    { 
 
     $nSize = intval($nSize); 
 
     if($nSize<=0) $nSize=1; 
 
     ini_set('memory_limit', $nSize.'M'); 
 
    } 
 

 
    /** 
 
    * Указание пути к шрифтам 
 
    * @param string путь к директории c файлами шрифтов 
 
    */ 
 
    function setFontDir($sPath) 
 
    { 
 
     $this->sFontDir = $sPath; 
 
    } 
 

 
    function getAutofitResultSize($nWidth = false, $nHeight = false) 
 
    { 
 
     if(! $nHeight) # не указана высота, возвращаем autofit-высоту 
 
     { 
 
      return intval(($nWidth/$this->img['orig_width'])*$this->img['orig_height']); 
 
     } 
 
     else if(! $nWidth) # не указана ширина, возвращаем autofit-ширину 
 
     { 
 
      return intval(($nHeight/$this->img['orig_height'])*$this->img['orig_width']); 
 
     }   
 
    } 
 

 
    function getOriginalWidth() 
 
    { 
 
     return (int)$this->img['src_width']; 
 
    } 
 

 
    function getOriginalHeight() 
 
    { 
 
     return (int)$this->img['src_height']; 
 
    } 
 

 
}

ответ

0

ЗАКАНЧИВАТЬ ответ от @orrd в этой теме: How to stop PHP iMagick auto-rotating images based on EXIF 'orientation' data

Вам придется разобраться, куда его поместить, поскольку я не заинтересован в работе над более чем 500 строками чужого кода.

У вас могут быть проблемы, если данные ориентации отсутствуют или указаны неверно.

+0

спасибо за ваш ответ, но я не могу угадать, какие переменные использовать для моего кода $ image = new Imagick ('my-image-file.jpg'); autoRotateImage ($ image); // - Сделайте другие вещи для изображения здесь - $ image-> writeImage ('result-image.jpg'); –