学习内容:
https://www.kancloud.cn/tpshop/thinkphp5/233345
完全开发手册:
https://www.kancloud.cn/manual/thinkphp5/177530
教程中的代码:https://github.com/phpervip/tp5a
代码示例:
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Image;
class Upload extends Controller
{
public function picture(Request $request){
$file = $request->file('image');
if(true !== $this->validate(['image'=>$file],['image'=>'require|image'])){
$this->error('请选择图像文件');
}else{
// var_dump($request);exit;
$image = Image::open($file);
switch($request->param('type')){
case 1:// 图片裁剪
$image->crop(300,300);
break;
case 2:// 缩略图
$image->thumb(60,60,Image::THUMB_CENTER);
break;
case 3:// 垂直翻转
$image->flip();
break;
case 4:// 水平翻转
$image->flip(Image::FLIP_Y);
break;
case 5:// 图片旋转
$image->rotate(30);
break;
case 6:// 图片水印
$image->water('./uploads/20170724/logo_v2.png',Image::WATER_NORTHWEST,50);
break;
case 7:// 文字水印
$image->text('THINKPHP',VENDOR_PATH.'topthink/think-captcha/assets/ttfs/1.ttf',20,'#ffffff');
break;
}
$saveName = $request->time().'.png';
$image->save(ROOT_PATH.'public/uploads/'.$saveName);
$this->success('图像处理完毕...','/uploads/'.$saveName,1);
}
}
}
模板文件:
注意:测试时,应找一张不对称的图片,更好的看到效果。
例:
<h2>图像上传和处理示例</h2>
<FORM method="post" enctype="multipart/form-data" class="form" action="{:url('picture')}">
选择图像文件:<INPUT type="file" class="file" name="image"><br/>
选择处理类型:<SELECT name="type">
<option value="1" selected>图片裁剪
<option value="2">生成缩略图
<option value="3">垂直翻转
<option value="4">水平翻转
<option value="5">图片翻转
<option value="6">添加图片水印
<option value="7">添加文字水印
</SELECT>
<INPUT type="submit" class="btn" value=" 提交 ">
</FORM>
<div class="copyright">
<a title="官方网站" href="http://www.thinkphp.cn">ThinkPHP</a>
<span>V5</span>
<span>{ 十年磨一剑-为API开发设计的高性能框架 }</span>
</div>
图片裁剪
图片剪裁使用crop方法,用法:
crop(剪裁宽度,剪裁高度,X坐标(默认0),Y坐标(默认0))
示例中图片剪裁的主要代码为
$image->crop(300, 300);
生成缩略图
生成图片缩略图使用thumb方法,用法:
thumb(最大宽度,最大高度,裁剪类型)
缩略图剪裁类型包括如下:
剪裁类型(常量=值) | 描述 |
---|---|
Image::THUMB_SCALING = 1 | 等比例缩放(默认类型) |
Image::THUMB_FILLED = 2 | 缩放后填充 |
Image::THUMB_CENTER = 3 居中裁 | 居中裁剪 |
Image::THUMB_NORTHWEST = 4 | 左上角裁剪 |
Image::THUMB_SOUTHEAST = 5 | 右下角裁剪 |
Image::THUMB_FIXED = 6 | 固定尺寸缩放 |
图像翻转
图片翻转使用flip方法,用法如下:
flip(翻转方式)
翻转方式 常量值
垂直翻转 Image::FLIP_X=1
水平翻转 Image::FLIP_Y=2
图片旋转
图片翻转使用rotate方法,用法如下:
rotate(顺时针旋转的度数)
添加水印
使用water方法添加图片水印
water(水印图片,水印位置常量(默认右下角),水印透明度(默认100))
水印位置常量如下:
水印位置 | 常量值 |
---|---|
左上角 | 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->water(‘./logo.png’, Image::WATER_NORTHWEST, 50);
文字水印
使用text方法给图片添加文字(水印)
text(水印文字,字体文件路径,文字大小,文字颜色,文字写入位置,偏移量,文字倾斜角度)
图片保存
前面所有的操作都是对图片进行相关的处理,最后一步就是需要把处理过的图片文件保存下来。
这就需要调用save方法进行图片的保存操作
save(保存文件名,图像类型,图像质量,隔行扫描)