lawondyss / imager
用于管理图像和缩略图的库。库在命令行中使用ImageMagick。
1.6.2
2016-10-15 16:30 UTC
Requires
- nette/utils: ~2.3
Requires (Dev)
- nette/application: 2.4.*
- nette/tester: 1.7.*
README
Imager是图像和缩略图的管理系统。
安装
使用Composer进行安装。在命令行中输入composer require lawondyss/imager
。
注意
库通过命令行使用ImageMagick。系统上必须安装ImageMagick。
生成的图像不能超过原始图像的200%。
示例
创建缩略图
// Image accepts argument of image as instance of class Imager\ImageInfo (extends SplFileInfo) $imageInfo = new Imager\ImageInfo('path/to/image.jpg'); $image = new Imager\Image($imageInfo); // create over factory // ImageFactory::create() accepts image name in string or instance of ImageInfo $factory = new Imager\ImageFactory; $image = $factory->create('path/to/image.jpg'); /** Thumbnails **/ // resize by width $thumb = $image->resize(100); // instance of Imager\ImageInfo with temporary image var_dump($thumb->getPathname()); // path to thumbnail // resize by height $thumb = $image->resize(null, 100); // resize with crop, cropped image is centered $thumb = $image->resize(100, 100); // origin dimensions $thumb = $image->resize(0, 0); /** Quality **/ // set in third parameter, lower is worse, 0 is default quality $thumb = $image->resize(0, 0, 25); /** Send image to output **/ header('Content-Type: ' . $thumb->getMime()); header('Content-Length: ' . $thumb->getSize()); echo $thumb->getContent();
源图像和缩略图存储库
$factory = new Imager\ImageFactory; // first argument is required; is directory with sources // second argument is optional; is directory for thumbnails; if not set, then is same as directory for sources; autocreated $repository = new Imager\Repository('path/to/sources', 'path/to/thumbnails'); // create ImageInfo of source image $uploadImageInfo = $factory->createInfo('path/to/uploaded/image.jpg'); // source image has not source, therefore save to sources directory // second optional argument defined new name for saved image $sourceImageInfo = $repository->save($uploadImageInfo, 'image.jpg'); // instance of Imager\ImageInfo with saved source image // fetch source image only by name $imageInfo = $repository->fetch('image.jpg'); // instance of Imager\ImageInfo with source image // created thumbnail $thumb = $factory->create($imageInfo)->resize(100); // instance of Imager\ImageInfo with temporary thumbnail of image // thumbnail has source, therefore save to thumbnails directory $thumbImageInfo = $repository->save($thumb); // instance of Imager\ImageInfo with saved thumbnail
Nette扩展
要将Imager注册为Nette扩展,需要添加以下配置。
extensions: imager: Imager\DI\Extension
扩展配置如下
imager: sourcesDir: %appDir%/../cdn/assets # required thumbsDir: %wwwDir%/images/thumbs baseUrl: http://cdn.example.com # if is your images in another URL basePath: images/thumbs/ # required; adds this path to URL errorImage: on # default on; displays error image if when generating an error occurred debugger: on # default as debugMode; display information in debug bar; WARNING! For every image send new HEAD request!
扩展示例
用于上传和显示图像的演示者
class ImagerPresenter extends BasePresenter { /** @var \Imager\Repository @inject */ public $repository; /** @var \Imager\ImageFactory @inject */ public $factory; public function renderDefault($id) { if (isset($id)) { $this->template->imageFromString = $id; $this->template->imageFromRepository = $this->repository->fetch($id); } } protected function createComponentUploadForm() { $control = new Nette\Application\UI\Form; $control->addUpload('photo') ->setRequired(); $control->addSubmit('load', 'load image'); $control->onSuccess[] = $this->uploadFormSucceed; return $control; } public function uploadFormSucceed(Nette\Application\UI\Form $form, $values) { $upload = $this->factory->createInfo($values->photo->getTemporaryFile()); $source = $this->repository->save($upload); $this->redirect('default', $source->getFilename()); } }
Latte模板
{block content}
{control uploadForm}
{ifset $image}
<img n:src="$imageFromRepository, 200, 0"> {* set width, origin height *}
<img n:src="$imageFromRepository, 200, 300"> {* set width and height *}
<img n:src="$imageFromRepository, null, 300"> {* resize by height *}
<img n:src="$imageFromRepository, 200"> {* resize by width *}
<img n:src="$imageFromRepository"> {* origin width and height *}
{* set quality *}
<img n:src="$imageFromRepository, null, null, 25"> {* origin width and height, but lowest quality *}
{* same parameters as for $imageFromRepository *}
<img n:src="$imageFromString">
{/ifset}
图片链接
如果您需要创建图片链接(例如电子邮件),则可以使用ImageFactory::createLink()
方法。只有在集成到Nette中时才能创建链接。
class EmailPresenter extends BasePresenter { /** @var \Imager\ImageFactory @inject */ public $factory; public function actionSendEmail($email) { // ... defines $images as array with Imager\ImageInfo objects or names of images $linksHtml = []; foreach ($images as $image) { $linksHtml = $this->createImg($this, $image); } // ... functionality for send e-mail } private function createImg($image, $width = null, $height = null) { $link = $this->factory->createLink($this, $image, $width, $height); $img = Nette\Utils\Html::el('img', ['src' => $link]); return $img->render(); } }