imagemagick - 缩小/裁剪/一次性保存到jpeg?

时间:2011-04-27 00:38:00

标签: php image imagemagick

我有一个PHP脚本,会收到一堆上传的图片。

我需要做的是使用imagemagick动态创建每个小缩略图。

我可以轻松做到这一点,但我还需要裁剪它,以便缩略图始终为100x100。

提供的图像比例不同,所以简单地缩小尺寸是行不通的。

我可以缩小尺寸,裁剪到100x100并一步保存到jpeg吗?

3 个答案:

答案 0 :(得分:2)

我相信这应该做你想做的事情:

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 :(得分:1)

简答:不。这将是3个步骤,不能少。

更长的答案:您可以使用命令行界面来完成。在PHP中,唯一的方法是编写一个能够满足您要求的函数。然后,对于每个图像,您只需调用您的函数即可。我不确定这比仅仅单独使用3个Imagick功能更有益......

答案 2 :(得分:0)

我喜欢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); 
}