imagemagick - уменьшить размер / обрезать / сохранить в формате JPEG за один раз? - PullRequest
1 голос
/ 27 апреля 2011

У меня есть скрипт php, который получит кучу загруженных изображений.

Что мне нужно сделать, так это создать небольшую миниатюру каждой из них на лету, используя imagemagick.

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

предоставленные изображения не будут иметь такие же пропорции, поэтому простое сокращение не будет работать.

Можно ли уменьшить размер, обрезать до 100x100 и сохранить в формате jpeg всего за один шаг?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Я считаю, что это должно делать то, что вы хотите:

convert 'just_uploaded/*' -resize 100x100^ -gravity center -extent 100x100 -set filename:f '%t' +adjoin 'just_uploaded_thumbs/%[filename:f].jpg'

resize уменьшит размер, extent (в сочетании с gravity) обрезает, а остальное позаботится о сохранении с помощьюизмененное имя в формате JPEG в другом каталоге.

1 голос
/ 27 апреля 2011

Краткий ответ: нет. Это будет 3 шага, не меньше.

Более длинный ответ: вы можете сделать это, используя интерфейс командной строки. В PHP единственный способ - написать функцию, которая будет делать то, что вы просите. Затем для каждого изображения вы можете просто вызвать свою функцию. Я не уверен, насколько это выгоднее, чем просто использовать 3 функции Imagick по отдельности ...

0 голосов
/ 27 апреля 2011

Мне нравится sfThumbnailPlugin.Он распространяется как на ImageMagick, так и на GD

http://www.symfony -project.org / plugins / sfThumbnailPlugin

Пример:

public function executeUpload()
{
  // Retrieve the name of the uploaded file
  $fileName = $this->getRequest()->getFileName('file');

  // Create the thumbnail
  $thumbnail = new sfThumbnail(150, 150);
  $thumbnail->loadFile($this->getRequest()->getFilePath('file'));
  $thumbnail->save(sfConfig::get('sf_upload_dir').'/thumbnail/'.$fileName, 'image/png');

  // Move the uploaded file to the 'uploads' directory
  $this->getRequest()->moveFile('file', sfConfig::get('sf_upload_dir').'/'.$fileName);

  // Do whatever is next
  $this->redirect('media/show?filename='.$fileName); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...