php-压缩base64解码图像失败
我得到的图像是base64编码的字符串前端,我必须解码它们并将它们作为图像保存在服务器中。图像可以是任何格式-png、gif或jpeg。 这部分很好用。但有时用户上传的图片可能会非常大,所以我试图从后端压缩它们,这部分失败得很惨 我有两个功能。一个用于将base64字符串转换为图像,另一个用于压缩它 这是将字符串转换为图像的函数php-压缩base64解码图像失败,php,image,image-processing,image-compression,Php,Image,Image Processing,Image Compression,我得到的图像是base64编码的字符串前端,我必须解码它们并将它们作为图像保存在服务器中。图像可以是任何格式-png、gif或jpeg。 这部分很好用。但有时用户上传的图片可能会非常大,所以我试图从后端压缩它们,这部分失败得很惨 我有两个功能。一个用于将base64字符串转换为图像,另一个用于压缩它 这是将字符串转换为图像的函数 function uploadTimelineImage($base64Img) { $data= array(); $upAt=date('YmdH
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
“我的”函数上载原始图像。为什么不使用此函数创建任何类型的图像表单base64 edncoded图像字符串
function uploadTimelineImage($base64Img,$h,$w)
{
$im = imagecreatefromstring($base64Img);
if ($im !== false) {
$width = imagesx($im);
$height = imagesy($im);
$r = $width / $height; // ratio of image
// calculating new size for maintain ratio of image
if ($w/$h > $r) {
$newwidth = $h*$r;
$newheight = $h;
} else {
$newheight = $w/$r;
$newwidth = $w;
}
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagedestroy($im);
$fileName = 'img'.date('Ymd').'.jpeg';
$filepath = 'folder/'.$fileName ;
imagejpeg($dst,$filepath);
imagedestroy($dst);
return $fileName;
}
else
{
return "";
}
}
一般说明:尝试压缩已压缩格式(png、gif、jpg)的图像没有任何意义。如果图像太大,可能需要调整系统的
.ini
文件以处理更大的文件。如果较大的文件确实被上传了,那么你可以删除这个评论。是其他原因造成的,我看不出是什么原因。但是,请检查路径设置和权限。无论如何,这会减少大小,是的,我知道我也会失去清晰度。是否仍然需要从后端减少映像的大小。据我所知,base64将图像转换为字符串,它不会减小大小。我检查了原始文件和上传的文件@arkaschaIt并不是要上传更大的图片,我正在尝试对它们进行一点压缩,以便它们能够更快地加载@Fred-ii未能打开流:我没有看到这样的文件或目录错误,告诉我压缩图像没有被正确保存(和/或读取);这就是我从中得到的@AmeliaearHeart它会缩小图像的大小吗@Haresh Vidja你想减小图像大小或图像质量?图像大小主要是…我不在乎我是否也会失去一点清晰度。但图像的大小主要取决于图像的大小@哈雷什Vidja@AmeliaEarheart,我已经修改了使用自定义高度和宽度传递函数调整图像大小的代码。谢谢亲爱的..我将尝试此代码。希望这能解决问题@哈雷什·维贾