# 图像操作
Nette \ Utils \ Image类用于基本的图像处理。 它简化了基本操作,如图像大小调整,锐化或将图像发送到浏览器。
如果你想在PHP中操作图像(比如缩放或锐化图像),你必须编写一个不可读和不可理解的代码。 它不会是Nette框架,如果它没有来更好的API :-)
我们可以从加载文件中的图像开始:
~~~
use Nette\Utils\Image;
$image = Image::fromFile('nette.jpg');
~~~
或者我们可以创建新的空白图像,大小为100×200:
~~~
$image = Image::fromBlank(100, 200);
~~~
我们可以选择设置背景颜色(默认为黑色):
~~~
$image = Image::fromBlank(100, 200, Image::rgb(125, 0, 0));
~~~
我们会写出它的大小:
~~~
echo "Image size is: $image->width × $image->height";
~~~
## 图像调整大小
我们将按比例缩小图像,使其不超过50×30像素:
~~~
$image->resize(50, 30);
~~~
可以只设置一个维度,计算第二个维度:
~~~
$image->resize(50, NULL); // width 50px, height auto
$image->resize(NULL, 30); // width auto, height 30px
~~~
任何维度也可以百分比设置:
~~~
$image->resize('75%', 30); // 75% × 30px
~~~
在所提到的示例中,图像仅按比例缩小。 可以通过使用指令Image :: ENLARGE允许放大:
~~~
$image->resize(50, 30, Image::ENLARGE);
~~~
使用指令Image :: STRETCH,我们可以允许大小的非比例变化:
~~~
$image->resize(50, 30, Image::STRETCH);
~~~
两个指令可以组合:
~~~
$image->resize(50, 30, Image::ENLARGE | Image::STRETCH);
~~~
如果我们将一个或两个维度作为负数写入,图像将被翻转(水平或垂直):
~~~
$flipped = $image->resize(NULL, '-100%'); // flip vertically
$flipped = $image->resize('-100%', '-100%'); // rotate by 180°
$flipped = $image->resize(-125, 50); // resize & flip horizontally
~~~
## 图像修改
减少图像后,我们可以通过锐化来改善它:
~~~
$image->sharpen();
~~~
我们还可以通过矩形的坐标修剪图像:
~~~
$image->crop($left, $top, $width, $height);
~~~
缩小的图像可以插入到另一个(所谓的水印)中。
~~~
$blank = Image::fromBlank(320, 240, Image::rgb(52, 132, 210));
$blank->place($image, 0, 0); // place into a position 0px, 0px
// coordinates can be set also in percentage
$blank->place($image, '80%', '75%', 25); // transparency is 25 %
~~~
Nette \ Utils \ Image简化了从GD扩展中调用所有图形函数,例如imagefilledrectangle,但使用更易理解的对象方法。
~~~
$white = Image::rgb(255, 255, 255);
$image->filledRectangle(0, 0, $width, $height, $white);
~~~
## 图像保存
图像可以保存到文件中:
~~~
$image->save('resampled.jpg');
~~~
自动地,也可以设置图像的质量和格式(如果格式未设置,它从文件扩展名检测到):
~~~
$image->save('resampled.jpg', 80, Image::JPEG); // JPEG, quality 80%
~~~
或者,图像可以保存到变量中:
~~~
$binary = (string) $image;
~~~
或者您可以使用相应的标题Content-Type的设置将其直接发送到浏览器:
~~~
// send it like image/jpeg
$image->send();
// send it like image/png
$image->send(Image::PNG);
~~~
这样的API真的很高兴使用,不是吗?
- Nette简介
- 快速开始
- 入门
- 主页
- 显示文章详细页
- 文章评论
- 创建和编辑帖子
- 权限验证
- 程序员指南
- MVC应用程序和控制器
- URL路由
- Tracy - PHP调试器
- 调试器扩展
- 增强PHP语言
- HTTP请求和响应
- 数据库
- 数据库:ActiveRow
- 数据库和表
- Sessions
- 用户授权和权限
- 配置
- 依赖注入
- 获取依赖关系
- DI容器扩展
- 组件
- 字符串处理
- 数组处理
- HTML元素
- 使用URL
- 表单
- 验证器
- 模板
- AJAX & Snippets
- 发送电子邮件
- 图像操作
- 缓存
- 本土化
- Nette Tester - 单元测试
- 与Travis CI的持续集成
- 分页
- 自动加载
- 文件搜索:Finder
- 原子操作