用thinkphp6实现图片文件格式转换
1,在控制器中获取上传的文件
$file = $this->request->file('image');
2,判断文件是否上传成功并获取文件扩展名
if ($file) {
$info = $file->validate(['size'=>1024*1024*2, 'ext'=>'jpg,jpeg,png'])->move('uploads/');
if ($info) {
// 获取文件扩展名
$ext = $info->getExtension();
$filename = $info->getFilename();
} else {
return $this->error($file->getError());
}
} else {
return $this->error('请上传文件!');
}
3,判断扩展名,如果是jpg或jpeg,则将其转换成png
if ($ext == 'jpg' || $ext == 'jpeg') {
$img = Image::open('uploads/' . $filename);
$img->save('uploads/' . $filename . '.png');
$ext = 'png';
}
这里使用了 thinkphp 自带的图片处理库 Image,将 jpg 转换为 png 格式,并保存到 uploads 目录下。
4,返回图片链接
最后一步是在控制器中返回图片链接。
return $this->success([
'url' => '/uploads/' . $filename . '.' . $ext
]);
下面是完整代码
控制器代码
<?php
namespace appindexcontroller;
use thinkController;
use thinkfacadeDb;
use thinkfacadeView;
use thinkfacadeRequest;
use thinkfacadeFilesystem;
use thinkImage;
class Index extends Controller
{
public function index()
{
return View::fetch();
}
public function uploadImage()
{
$file = $this->request->file('image');
if ($file) {
$info = $file->validate(['size'=>1024*1024*2, 'ext'=>'jpg,jpeg,png'])->move('uploads/');
if ($info) {
$ext = $info->getExtension();
$filename = $info->getFilename();
if ($ext == 'jpg' || $ext == 'jpeg') {
$img = Image::open('uploads/' . $filename);
$img->save('uploads/' . $filename . '.png');
$ext = 'png';
}
return $this->success([
'url' => '/uploads/' . $filename . '.' . $ext
]);
} else {
return $this->error($file->getError());
}
} else {
return $this->error('请上传文件!');
}
}
}
前端这里用的是Bootstrap
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>图片上传</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<form method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="image">选择图片:</label>
<input type="file" name="image" id="image">
</div>
<button type="button" class="btn btn-primary" id="upload-btn">上传</button>
</form>
<div class="mt-4" id="result"></div>
</div>
<script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>
<script>
$(function() {
$('#upload-btn').click(function() {
var formData = new FormData();
formData.append('image', $('#image')[0].files[0]);
$.ajax({
url: '/index/uploadImage',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(res) {
$('#result').html('<img src="' + res.data.url + '">');
},
error: function(err) {
console.log(err);
}
});
});
});
</script>
</body>
</html>
这样就完成了基于 ThinkPHP 实现图片格式转换的功能。请注意在根目录下创建一个 uploads 目录,用于保存上传的文件,同时也需要安装 intervention/image 扩展库来实现图片处理。
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!