我的应用程序正在从网络浏览器接收 base64 编码的图像文件。我需要将它们保存在客户端上。所以我做了:
$data = base64_decode($base64img);
$fileName = uniqid() . '.jpg';
file_put_contents($uploadPath . $fileName, $data);
return $fileName;
哪个工作正常。
现在我需要将图像压缩并调整为最大。800 宽度和高度,保持纵横比。
所以我尝试了:
$data = base64_decode($base64img);
$fileName = uniqid() . '.jpg';
file_put_contents($uploadPath . $fileName, $data);
return $fileName;
这不起作用(错误:“imagejpeg() 期望参数 1 是资源,给定字符串”)。当然,这确实会压缩,但不会调整大小。
最好将文件保存在 /tmp 中,读取它并通过 GD 调整大小/移动?
谢谢。
第二部分
感谢@ontrack,我现在知道了
$data = imagejpeg(imagecreatefromstring($data),$uploadPath . $fileName,80);
作品。
但现在我需要将图像的大小调整为最大 800 的宽度和高度。我有这个功能:
function resizeAndCompressImagefunction($file, $w, $h, $crop=FALSE) {
list($width, $height) = getimagesize($file);
$r = $width / $height;
if ($crop) {
if ($width > $height) {
$width = ceil($width-($width*($r-$w/$h)));
} else {
$height = ceil($height-($height*($r-$w/$h)));
}
$newwidth = $w;
$newheight = $h;
} else {
if ($w/$h > $r) {
$newwidth = $h*$r;
$newheight = $h;
} else {
$newheight = $w/$r;
$newwidth = $w;
}
}
$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return $dst;
}
所以我想我可以这样做:
$data = imagejpeg(resizeAndCompressImagefunction(imagecreatefromstring($data),800,800),$uploadPath . $fileName,80);
这是行不通的。