我正在使用react来编辑图像并使用mycanvas.toDataURL()
将其最终数据发送到php。
API I am using说,我可以,而不是图像,但我可以
[...]从缓冲区上传图像(带二进制的字符串)
他们的例子如下:
$sourceData = file_get_contents("example.jpg");
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
就像我说的,我没有上传的图片,而是有一个如下所示的数据URI:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4C2dj892d2dh98a2d...
如何将此数据URI转换为有效缓冲区以用作$sourceData
?
答案 0 :(得分:3)
您可以尝试将字符串转换为图像文件然后发送该文件,您可以使用这样的代码来执行此操作:
function base64_to_image($base64_string, $output_file) {
$ifp = fopen( $output_file, 'wb' );
$data = explode( ',', $base64_string );
fwrite( $ifp, base64_decode( $data[ 1 ] ) );
fclose( $ifp );
return $output_file;
}
所以,只需称它为:
$file = base64_to_image('data:image/png;base64,iVBORw0...', 'myImage.png');
$sourceData = file_get_contents($file);
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
修改强> 或者(首选)您可以按原样使用解码后的字符串,而不是写入文件并读取它。像这样:
function base64_to_image($base64_string) {
$data = explode( ',', $base64_string );
return base64_decode($data[ 1 ]);
}
你可以这样称呼它:
$sourceData = base64_to_image('data:image/png;base64,iVBORw0...');
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();