我有一个PHP脚本,会收到一堆上传的图片。
我需要做的是使用imagemagick动态创建每个小缩略图。
我可以轻松做到这一点,但我还需要裁剪它,以便缩略图始终为100x100。
提供的图像比例不同,所以简单地缩小尺寸是行不通的。
我可以缩小尺寸,裁剪到100x100并一步保存到jpeg吗?
答案 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);
}