如何将数据URI转换为缓冲区(带二进制的字符串)?

时间:2018-04-03 12:44:29

标签: php

我正在使用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

1 个答案:

答案 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();