私のアプリは、Web ブラウザーから 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);
これは機能しません。