Laravel,旋转图像要求参数是有效路径
Laravel, rotating images expects parameter to be a valid path
当我上传图片到数据库时 Laravel 旋转它们,所以我发现
,然后在实施后我得到这个错误 exif_read_data() expects parameter 1 to be a valid path, array given
。我该如何解决这个问题?
控制器
if($request->hasFile('files')){
$store_file = [];
$exif = exif_read_data($request->file('files'));
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$image = imagerotate($image,90,0);
break;
case 3:
$image = imagerotate($image,180,0);
break;
case 6:
$image = imagerotate($image,-90,0);
break;
}
}
// $files = $request->file('files');
foreach ($exif as $file) {
$path = $file->storeAs('public/photos');
$store_file[] = [
'product_id' => $product->id,
'filename' => $path
];
}
由于提到的错误 exif_read_data() expects parameter 1 to be a valid path, array given
。
您必须提供从存储到 exif_read_data()
函数的图像路径,这意味着您需要遍历 $request->file('files') 并通过
获取存储路径
$path = $file->store('public/photos');
然后
exif_read_data($path);
修复
if($request->hasFile('files')){
$store_file = [];
foreach ($request->file('files') as $file) {
$fileName = uniqid() . time() . '.' . $file->getClientOriginalExtension();
$file->storeAs('public/photos', $fileName);
$filePath = $file->getPathName();
$exif = @exif_read_data($filePath);
if(isset($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$deg = 90;
break;
case 3:
$deg = 180;
break;
case 6:
$deg = -90;
break;
}
if (isset($deg)) {
$fullQualifiedFilePath = storage_path('app/public/photos/' . $fileName);
if ($file->getClientOriginalExtension() == "png") {
$img_new = imagecreatefrompng($fullQualifiedFilePath);
$img_new = imagerotate($img_new, $deg, 0);
imagepng($img_new, $fullQualifiedFilePath);
} else {
$img_new = imagecreatefromjpeg($fullQualifiedFilePath);
$img_new = imagerotate($img_new, $deg, 0);
imagejpeg($img_new, $fullQualifiedFilePath, 80);
}
}
}
$store_file[] = [
'product_id' => $product->id,
'filename' => 'public/photos/' . $fileName
];
}
ProductsPhoto::insert($store_file);
}
当我上传图片到数据库时 Laravel 旋转它们,所以我发现
exif_read_data() expects parameter 1 to be a valid path, array given
。我该如何解决这个问题?
控制器
if($request->hasFile('files')){
$store_file = [];
$exif = exif_read_data($request->file('files'));
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$image = imagerotate($image,90,0);
break;
case 3:
$image = imagerotate($image,180,0);
break;
case 6:
$image = imagerotate($image,-90,0);
break;
}
}
// $files = $request->file('files');
foreach ($exif as $file) {
$path = $file->storeAs('public/photos');
$store_file[] = [
'product_id' => $product->id,
'filename' => $path
];
}
由于提到的错误 exif_read_data() expects parameter 1 to be a valid path, array given
。
您必须提供从存储到 exif_read_data()
函数的图像路径,这意味着您需要遍历 $request->file('files') 并通过
$path = $file->store('public/photos');
然后
exif_read_data($path);
修复
if($request->hasFile('files')){
$store_file = [];
foreach ($request->file('files') as $file) {
$fileName = uniqid() . time() . '.' . $file->getClientOriginalExtension();
$file->storeAs('public/photos', $fileName);
$filePath = $file->getPathName();
$exif = @exif_read_data($filePath);
if(isset($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$deg = 90;
break;
case 3:
$deg = 180;
break;
case 6:
$deg = -90;
break;
}
if (isset($deg)) {
$fullQualifiedFilePath = storage_path('app/public/photos/' . $fileName);
if ($file->getClientOriginalExtension() == "png") {
$img_new = imagecreatefrompng($fullQualifiedFilePath);
$img_new = imagerotate($img_new, $deg, 0);
imagepng($img_new, $fullQualifiedFilePath);
} else {
$img_new = imagecreatefromjpeg($fullQualifiedFilePath);
$img_new = imagerotate($img_new, $deg, 0);
imagejpeg($img_new, $fullQualifiedFilePath, 80);
}
}
}
$store_file[] = [
'product_id' => $product->id,
'filename' => 'public/photos/' . $fileName
];
}
ProductsPhoto::insert($store_file);
}