繁体   English   中英

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

[英]How to convert data URI to buffer (string with binary)?

我正在使用react编辑图像并使用mycanvas.toDataURL()将其最终数据发送到php。

我正在使用API说,虽然可以

[...]从缓冲区上传图像(带二进制的字符串)

他们的示例如下所示:

$sourceData = file_get_contents("example.jpg");
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();

就像我说的,我没有一个上传的图片,而是一个看起来像这样的数据URI:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4C2dj892d2dh98a2d...

如何将该数据URI转换为有效的缓冲区以用作$sourceData

您可以尝试将字符串转换为图像文件,然后发送该文件,可以使用如下代码执行此操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM