이미지를 base64로 인코딩 된 문자열 프론트 엔드로 가져오고이를 디코드하여 서버의 이미지로 저장해야합니다. 이미지 형식은 png, gif 또는 jpeg 일 수 있습니다. 이 부분은 정상적으로 작동합니다. 하지만 때로는 사용자가 업로드 한 이미지가 매우 큰 크기가 될 수 있으므로 백엔드에서 이미지를 압축하려고하는데이 부분은 비참하게 실패했습니다.php- base64 디코딩 된 이미지 압축 실패
두 가지 기능이 있습니다. 하나는 base64 문자열을 이미지로 변환하고 다른 하나는 압축하는 것입니다.
문자열을 이미지로 변환하는 함수입니다.
function uploadTimelineImage($base64Img)
{
$data= array();
$upAt=date('YmdHis');
if (strpos($base64Img, 'data:image/png;base64') !== false)
{
$img = str_replace('data:image/png;base64,', '', $base64Img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$extension= 'png';
}
if (strpos($base64Img, 'data:image/gif;base64') !== false)
{
$img = str_replace('data:image/gif;base64,', '', $base64Img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$extension= 'gif';
}
if (strpos($base64Img, 'data:image/jpeg;base64') !== false)
{
$img = str_replace('data:image/jpeg;base64,', '', $base64Img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$extension= 'jpeg';
}
$fileName = 'img'.$upAt.$extension;
$filePath = 'foldername/'.'img'.$upAt.$extension;
//upload image to folder
$success = file_put_contents($filePath, $data);
$result = $success ? 1 : 0;
//call to compression function
$compressThisImg= $filePath;
$d = compress($compressThisImg, $fileName, 80);
if($result==1)
{
return $fileName;
}
else
{
return null;
}
}
그리고이 압축 않는 기능입니다 :
//Function to compress an image
function compress($source, $destination, $quality)
{
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source);
elseif ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source);
elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source);
imagejpeg($image, $destination, $quality);
return $destination;
}
그러나 위의 기능을 어떤 압축을하지 않습니다, 그것은 발생 오류 :
failed to open stream: No such file or directory
내 기능은 원본을 업로드 영상.
일반적인주의 사항 : 이미 압축 된 형식 (png, gif, jpg)의 이미지를 압축하려고하면 의미가 없습니다. – arkascha
이미지가 클 경우 더 큰 파일을 처리하기 위해 시스템의 .ini 파일을 조정해야 할 수도 있습니다. 대용량 파일이 업로드되는 경우이 주석을 긁을 수 있습니다. 뭔가 다른 것이 원인이고 나는 그것이 무엇인지 알 수 없습니다. 그러나 경로 설정 및 사용 권한을 확인하십시오. –
어쨌든 크기가 줄어들고 그래도 선명도가 떨어질 것입니다. 어쨌든 백엔드에서 이미지의 크기를 줄이려고합니다. 내가 아는 한 base64는 이미지를 문자열로 변환하지만 크기를 줄이지는 못합니다. 원본 파일과 업로드 된 파일을 확인했습니다. @arkascha – Annabelle