php tp3限制图片格式,图像处理 · ThinkPHP3.2.3完全开发手册 · 看云

使用Think\Image类进行图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持。

## 实例化类库

~~~

$image = new \Think\Image();

~~~

默认使用GD库进行图像操作,如果需要使用Imagick库操作的话,需要改成:

~~~

$image = new \Think\Image(\Think\Image::IMAGE_IMAGICK);

// 或者采用

$image = new \Think\Image('Imagick');

~~~

## 图像操作

下面来看下基础的图像操作功能的使用方法。

### 打开图像文件

假设当前入口文件目录下面有一个1.jpg文件,如图所示:

![1](http://box.kancloud.cn/2015-04-18_5531edd219dd2.png)

使用open方法打开图像文件进行相关操作:

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

~~~

也可以简化成下面的方式:

~~~

$image = new \Think\Image(\Think\Image::IMAGE_GD,'./1.jpg'); // GD库

// 或者

$image = new \Think\Image(\Think\Image::IMAGE_IMAGICK,'./1.jpg'); // imagick库

~~~

### 获取图像信息

可以获取打开图片的信息,包括图像大小、类型等,例如:

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

$width = $image->width(); // 返回图片的宽度

$height = $image->height(); // 返回图片的高度

$type = $image->type(); // 返回图片的类型

$mime = $image->mime(); // 返回图片的mime类型

$size = $image->size(); // 返回图片的尺寸数组 0 图片宽度 1 图片高度

~~~

### 裁剪图片

使用crop和save方法完成裁剪图片功能。

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

//将图片裁剪为400x400并保存为corp.jpg

$image->crop(400, 400)->save('./crop.jpg');

~~~

生成的图片如图:

![crop](http://box.kancloud.cn/2015-04-18_5531edd232df9.png)

支持从某个坐标开始裁剪,例如下面从(100,30)开始裁剪:

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

//将图片裁剪为400x400并保存为corp.jpg

$image->crop(400, 400,100,30)->save('./crop.jpg');

~~~

生成的图片如图:

![crop](http://box.kancloud.cn/2015-04-18_5531edd24868d.png)

### 生成缩略图

使用thumb方法生成缩略图

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg

$image->thumb(150, 150)->save('./thumb.jpg');

~~~

生成的缩略图如图所示:

![thumb](http://box.kancloud.cn/2015-04-18_5531edd25b6eb.png)

我们看到实际生成的缩略图并不是150*150,因为默认采用原图等比例缩放的方式生成缩略图,最大宽度是150。

可以支持其他类型的缩略图生成,设置包括Think\Image的下列常量或者对应的数字:

~~~

IMAGE_THUMB_SCALE = 1 ; //等比例缩放类型

IMAGE_THUMB_FILLED = 2 ; //缩放后填充类型

IMAGE_THUMB_CENTER = 3 ; //居中裁剪类型

IMAGE_THUMB_NORTHWEST = 4 ; //左上角裁剪类型

IMAGE_THUMB_SOUTHEAST = 5 ; //右下角裁剪类型

IMAGE_THUMB_FIXED = 6 ; //固定尺寸缩放类型

~~~

例如:

#### 居中裁剪

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

// 生成一个居中裁剪为150*150的缩略图并保存为thumb.jpg

$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_CENTER)->save('./thumb.jpg');

~~~

居中裁剪后生成的缩略图效果如图:

![thumb](http://box.kancloud.cn/2015-04-18_5531edd265159.png)

#### 左上角剪裁

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

// 生成一个左上角裁剪为150*150的缩略图并保存为thumb.jpg

$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_NORTHWEST)->save('./thumb.jpg');

~~~

左上角裁剪后生成的缩略图效果如图:

![thumb](http://box.kancloud.cn/2015-04-18_5531edd278ca6.png)

#### 缩放填充

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

// 生成一个缩放后填充大小150*150的缩略图并保存为thumb.jpg

$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_FILLED)->save('./thumb.jpg');

~~~

缩放填充后生成的缩略图效果如图:

![thumb](http://box.kancloud.cn/2015-04-18_5531edd2846d6.png)

#### 固定大小

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

// 生成一个固定大小为150*150的缩略图并保存为thumb.jpg

$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_FIXED)->save('./thumb.jpg');

~~~

采用固定大小的缩略图可能会有所变形,生成的缩略图效果如图:

![thumb](http://box.kancloud.cn/2015-04-18_5531edd28ee34.png)

### 添加图片水印

~~~

$image = new \Think\Image();

$image->open('./1.jpg');

//将图片裁剪为440x440并保存为corp.jpg

$image->crop(440, 440)->save('./crop.jpg');

// 给裁剪后的图片添加图片水印(水印文件位于./logo.png),位置为右下角,保存为water.gif

$image->water('./logo.png')->save("water.gif");

// 给原图添加水印并保存为water_o.gif(需要重新打开原图)

$image->open('./1.jpg')->water('./logo.png')->save("water_o.gif");

~~~

water方法的第二个参数表示水印的位置,可以传入下列Think\Image类的常量或者对应的数字:

~~~

IMAGE_WATER_NORTHWEST = 1 ; //左上角水印

IMAGE_WATER_NORTH = 2 ; //上居中水印

IMAGE_WATER_NORTHEAST = 3 ; //右上角水印

IMAGE_WATER_WEST = 4 ; //左居中水印

IMAGE_WATER_CENTER = 5 ; //居中水印

IMAGE_WATER_EAST = 6 ; //右居中水印

IMAGE_WATER_SOUTHWEST = 7 ; //左下角水印

IMAGE_WATER_SOUTH = 8 ; //下居中水印

IMAGE_WATER_SOUTHEAST = 9 ; //右下角水印

~~~

例如:

~~~

$image = new \Think\Image();

// 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg

$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST)->save("water.jpg");

~~~

生成的图片效果如下:

![water](http://box.kancloud.cn/2015-04-18_5531edd298e86.png)

还可以支持水印图片的透明度(0~100,默认值是80),例如:

~~~

$image = new \Think\Image();

// 在图片左上角添加水印(水印文件位于./logo.png) 水印图片的透明度为50 并保存为water.jpg

$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST,50)->save("water.jpg");

~~~

生成的效果如下:

![water](http://box.kancloud.cn/2015-04-18_5531edd2b0615.png)

也可以支持给图片添加文字水印(假设在入口文件的同级目录下存在1.ttf字体文件),例如:

~~~

$image = new \Think\Image();

// 在图片右下角添加水印文字 ThinkPHP 并保存为new.jpg

$image->open('./1.jpg')->text('ThinkPHP','./1.ttf',20,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save("new.jpg");

~~~

生成的图片效果:

![new](http://box.kancloud.cn/2015-04-18_5531edd2c73b8.png)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值