ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 图像 `Phalcon\Image` 是允许您操作图像文件的组件。 可以对同一图像对象执行多个操作。 ## 适配器 该组件使用适配器来封装特定的图像操纵器程序。支持以下图像处理程序: | 类 | 描述 | | ---------------------------------- | ----------------------------------------------------------------------------------- | | `Phalcon\Image\Adapter\Gd` | 需要 [GD PHP extension](http://php.net/manual/en/book.image.php) | | `Phalcon\Image\Adapter\Imagick` | 需要 [ImageMagick PHP extension](http://php.net/manual/en/book.imagick.php) | ### 工厂 使用适配器选项加载`Image Adapter`类。 ```php <?php use Phalcon\Image\Factory; $options = [ 'width' => 200, 'height' => 200, 'file' => 'upload/test.jpg', 'adapter' => 'imagick', ]; $image = Factory::load($options); ``` ### 实现自己的适配器 必须实现`Phalcon\Image\AdapterInterface`接口才能创建自己的图像适配器或扩展现有的图像适配器。 ## 保存和渲染图像 在我们开始使用图像组件的各种功能之前,值得了解如何保存和渲染这些图像。 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); // ... // Overwrite the original image $image->save(); ``` ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); // ... // Save to 'new-image.jpg' $image->save('new-image.jpg'); ``` 您还可以更改图像的格式: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); // ... // Save as a PNG file $image->save('image.png'); ``` 保存为JPEG时,您还可以将质量指定为第二个参数: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); // ... // Save as a JPEG with 80% quality $image->save('image.jpg', 80); ``` ## 调整图像大小 有几种调整大小的模式: * `\Phalcon\Image::WIDTH` * `\Phalcon\Image::HEIGHT` * `\Phalcon\Image::NONE` * `\Phalcon\Image::TENSILE` * `\Phalcon\Image::AUTO` * `\Phalcon\Image::INVERSE` * `\Phalcon\Image::PRECISE` ### `\Phalcon\Image::WIDTH` 将自动生成高度以保持比例相同;如果指定高度,则会被忽略。 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->resize( 300, null, \Phalcon\Image::WIDTH ); $image->save('resized-image.jpg'); ``` ### `\Phalcon\Image::HEIGHT` 将自动生成宽度以保持比例相同;如果指定宽度,则会被忽略。 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->resize( null, 300, \Phalcon\Image::HEIGHT ); $image->save('resized-image.jpg'); ``` ### `\Phalcon\Image::NONE` * `NONE` 常数忽略原始图像比率。 * 宽度和高度都不是必需的。 * 如果未指定尺寸,则将使用原始尺寸。 * 如果新比例与原始比例不同,则图像可能会扭曲和拉伸。 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->resize( 400, 200, \Phalcon\Image::NONE ); $image->save('resized-image.jpg'); ``` ### `\Phalcon\Image::TENSILE` * 与 `NONE` 常数类似,`TENSILE` 常量忽略原始图像比率。 * 宽度和高度都是必需的。 * 如果新比例与原始比例不同,则图像可能会扭曲和拉伸。 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->resize( 400, 200, \Phalcon\Image::TENSILE ); $image->save('resized-image.jpg'); ``` ## 裁剪图像 例如,要从图像中心获得100px×100px的正方形: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $width = 100; $height = 100; $offsetX = (($image->getWidth() - $width) / 2); $offsetY = (($image->getHeight() - $height) / 2); $image->crop($width, $height, $offsetX, $offsetY); $image->save('cropped-image.jpg'); ``` ## 旋转图像 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); // Rotate an image by 90 degrees clockwise $image->rotate(90); $image->save('rotated-image.jpg'); ``` ## 翻转图像 `\Phalcon\Image::HORIZONTAL`常量)和垂直翻转图像(使用`\Phalcon\Image::VERTICAL`常量): ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); // Flip an image horizontally $image->flip( \Phalcon\Image::HORIZONTAL ); $image->save('flipped-image.jpg'); ``` ## 锐化图像 `sharpen()` 方法采用单个参数 - 0(无效果)和100(非常尖锐)之间的整数: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->sharpen(50); $image->save('sharpened-image.jpg'); ``` ## 为图像添加水印 ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $watermark = new \Phalcon\Image\Adapter\Gd('me.jpg'); // Put the watermark in the top left corner $offsetX = 10; $offsetY = 10; $opacity = 70; $image->watermark( $watermark, $offsetX, $offsetY, $opacity ); $image->save('watermarked-image.jpg'); ``` 当然,您也可以在将水印图像应用到主图像之前对其进行操作: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $watermark = new \Phalcon\Image\Adapter\Gd('me.jpg'); $watermark->resize(100, 100); $watermark->rotate(90); $watermark->sharpen(5); // Put the watermark in the bottom right corner with a 10px margin $offsetX = ($image->getWidth() - $watermark->getWidth() - 10); $offsetY = ($image->getHeight() - $watermark->getHeight() - 10); $opacity = 70; $image->watermark( $watermark, $offsetX, $offsetY, $opacity ); $image->save('watermarked-image.jpg'); ``` ## 模糊图像 `blur()`方法采用单个参数 - 0(无效果)和100(非常模糊)之间的整数: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->blur(50); $image->save('blurred-image.jpg'); ``` <a name='pixelating'></a> ## 像素化图像 `pixelate()` 方法采用单个参数 - 整数越高,图像的像素化程度越高: ```php <?php $image = new \Phalcon\Image\Adapter\Gd('image.jpg'); $image->pixelate(10); $image->save('pixelated-image.jpg'); ```