0

Давным-давно я создал небольшую библиотеку для изменения размеров изображений с использованием imagemagick через system(...), потому что я не чувствовал, что встроенные функции imagemagick для PHP были достаточными.Imagemagick thumbnail поколение с php - using -crop

Однако недавно мне пришлось перенести это в проект symfony, и я решил использовать sfThumbnailPlugin (если я правильно помню). Это, к сожалению, не включало функциональность посева - то есть для указания желаемого размера, например. 300x300 px и уменьшите эскиз, чтобы он соответствовал. Я решил реализовать эту функциональность самостоятельно, но, похоже, что-то не так.

Всякий раз, когда я изменяю размер изображения до нужного размера, ширина будет больше высоты, пропорции прикручиваются. Взгляните на этот пример: http://i37.tinypic.com/9hkqrl.png - В этом примере верхняя строка - это правильные пропорции, а нижняя строка - проблема.

В этом примере верх и низ должны быть обрезаны.

Вот код для той части, где делается урожай (имена переменных должны быть понятны):

<?php 
    if ($width/$height > $this->maxWidth/$this->maxHeight) { 
     // then resize to the new height... 
       $command .= ' -resize "x'.$this->maxWidth.'"'; 

       // ... and get the middle part of the new image 
       // what is the resized width? 
       $resized_w = ($this->maxWidth/$height) * $width; 

       // crop 
       $command .= ' -crop "'.$this->maxHeight.'x'.$this->maxWidth.'+'.round(($resized_w - $this->maxWidth)/2).'+0"'; 
      } else { 
       // or else resize to the new width 
       $command .= ' -resize "'.$this->maxHeight.'x"'; 

       // ... and get the middle part of the new image 
       // what is the resized height? 
       $resized_h = ($this->maxHeight/$width) * $height; 

       // crop 
       $command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight. 
          '+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage'; 
      } 

Является ли это вторая часть, если заявление, которое производит неверный код.

Может кто-нибудь исправить это для меня? Очевидно, что вычисления ошибочны.

ответ

2

Решение было следующим:

if ($width/$height > $this->maxWidth/$this->maxHeight) { 
     // then resize to the new height... 
       $command .= ' -resize "x'.$this->maxHeight.'"'; 

       // ... and get the middle part of the new image 
       // what is the resized width? 
       $resized_w = ($this->maxHeight/$height) * $width; 

       // crop 
       $command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.'+'.round(($resized_w - $this->maxWidth)/2).'+0" +repage'; 
      } else { 
       $command .= ' -resize "' . $this->maxWidth . 'x"'; 
       $resized_h = ($this->maxWidth/$width) * $height; 

       // crop 
       $command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight. 
          '+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage'; 
      } 
+0

марки этот вопрос, как ответил –

+0

не может до завтра. – phidah

1

Я говорю одно предложение, вы можете попробовать его,

Я увидел ссылку на изображение, я думаю, что эти условия не проверяются должным образом.

вы проверили состояние [(ширина/высота)> (MaxWidth/MaxHeight)] Вместо проверки

если (ширина == высота) {} ElseIf (ширина> высота) {} else (ширина < высота) {}

Проверьте это условие и в соответствии с этим условием обрезайте изображение и измените его размер.

Спасибо

Смежные вопросы