在 Laravel 中将 HTMLCanvasElement 存储为 JPG
Storing an HTMLCanvasElement as a JPG in Laravel
我在我的 Vue 组件中集成了一个裁剪脚本,returns 图像或 HTMLCanvasElement。在我的组件的 crop 方法中,我对我的上传函数进行了 axios post 调用。这是裁剪方法:
crop() {
var croppedCanvas = this.cropper.getCroppedCanvas()
var img = croppedCanvas.toDataURL('image/jpeg', 1.0);
var formData = new FormData();
formData.append('image', img) // I can send croppedCanvas here too if I want
axios.post('/api/upload', formData)
}
现在是问题。我似乎无法将 HTMLCanvasElement 或图像保存为 JPG 文件。我尝试了很多不同的方法(toDataURL、toBlob 等),但每一种都失败了。我的最新实现如下:
public function upload(Request $request) {
$input = $request->all();
$img = $input['image'];
Storage::put('picture.jpg', $img);
return response(Response::HTTP_OK);
}
这会在无法访问的 storage/public 文件夹中保存一个 26 字节的文件。
有人可以帮忙解决这个问题吗?
我只想将 HTMLCanvasElement 保存为我的 storage/public 文件夹中的 JPG 文件。
谢谢。
实际上正如此处文档中所述:https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL
toDataURL 方法 returns 返回一个 base64 编码的数据,所以你必须在服务器端解码它
你可以像这样在 laravel 中使用 base64_decode 方法
public function upload(Request $request) {
$img = $request->image;
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
Storage::put('picture.jpg', $data);
return response(Response::HTTP_OK);
}
我在我的 Vue 组件中集成了一个裁剪脚本,returns 图像或 HTMLCanvasElement。在我的组件的 crop 方法中,我对我的上传函数进行了 axios post 调用。这是裁剪方法:
crop() {
var croppedCanvas = this.cropper.getCroppedCanvas()
var img = croppedCanvas.toDataURL('image/jpeg', 1.0);
var formData = new FormData();
formData.append('image', img) // I can send croppedCanvas here too if I want
axios.post('/api/upload', formData)
}
现在是问题。我似乎无法将 HTMLCanvasElement 或图像保存为 JPG 文件。我尝试了很多不同的方法(toDataURL、toBlob 等),但每一种都失败了。我的最新实现如下:
public function upload(Request $request) {
$input = $request->all();
$img = $input['image'];
Storage::put('picture.jpg', $img);
return response(Response::HTTP_OK);
}
这会在无法访问的 storage/public 文件夹中保存一个 26 字节的文件。
有人可以帮忙解决这个问题吗?
我只想将 HTMLCanvasElement 保存为我的 storage/public 文件夹中的 JPG 文件。
谢谢。
实际上正如此处文档中所述:https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL
toDataURL 方法 returns 返回一个 base64 编码的数据,所以你必须在服务器端解码它
你可以像这样在 laravel 中使用 base64_decode 方法
public function upload(Request $request) {
$img = $request->image;
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
Storage::put('picture.jpg', $data);
return response(Response::HTTP_OK);
}