1
我使用axios通过ajax发送一个base64字符串。使用下面的方式,当它从base64数据编码回jpg时,我会以某种方式丢失大量数据。我怎样才能发送这个没有数据丢失?base64图像imagecreatefromstring()丢失数据
我从输入抓取文件并将其发送到
var reader = new FileReader();
reader.readAsDataURL(file);
和PHP脚本接收后为BASE64字符串被作为Ajax和爱可信为
axios.post('url', {main: img})
:
$incoming = json_decode(file_get_contents('php://input'))->main;
$mainImage = str_replace('data:image/jpeg;base64,', '', $incoming);
$img = imagecreatefromstring(base64_decode($mainImage));
$imageSave = imagejpeg($img, './uploaded.jpg');
例如,保存在服务器上的最近文件只有14k,但是我上传到i的原始文件输入字段为19k。我将客户端上传的base64输出到预览div,并且该图像保存为19k jpg,因此我认为它是php脚本。关于什么导致数据丢失的任何想法?也许一些axios config value?
就直接保存BASE64_DECODE($ mainImage)的'结果'的文件,如:'file_put_contents( './ uploaded.jpg',BASE64_DECODE($ mainImage));'。目前,您正在创建一个新的Jpeg图像,在保存时会稍微压缩一些。 –
@MagnusEriksson我必须将它作为jpg保存在服务器上。我猜axios正在发送我的一串base64数据,但我不知道。我的目标是使用ajax在服务器上获取一个jpg,所以任何不会丢失数据的方式都会很好。 – Harold
尝试上述解决方案。发生的是,前端正在发送编码的二进制图像数据base64。如果你只是将它解码并保存到一个文件中(用'.jpg'-扩展名,就像我的例子),你将得到一个上传图像的_exact_副本。 –