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

Php 如何将数据URI转换为缓冲区(带二进制的字符串)?,php,Php,我正在使用react编辑图像,并使用mycanvas.toDataURL()将其最终数据发送到php 上面说,我可以,而不是一张图片 […]从缓冲区上载图像(带二进制的字符串) 他们的示例如下所示: $sourceData = file_get_contents("example.jpg"); $resultData = \Tinify\fromBuffer($sourceData)->toBuffer(); data:image/png;base64,iVBORw0KGgoAAAANS

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

上面说,我可以,而不是一张图片

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

他们的示例如下所示:

$sourceData = file_get_contents("example.jpg");
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4C2dj892d2dh98a2d...
$sourceData = base64_to_image('data:image/png;base64,iVBORw0...');
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
正如我所说,我得到的数据URI不是上传的图像,而是如下所示:

$sourceData = file_get_contents("example.jpg");
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4C2dj892d2dh98a2d...
$sourceData = base64_to_image('data:image/png;base64,iVBORw0...');
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();

如何将此数据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 = file_get_contents("example.jpg");
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4C2dj892d2dh98a2d...
$sourceData = base64_to_image('data:image/png;base64,iVBORw0...');
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();

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

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 = file_get_contents("example.jpg");
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4C2dj892d2dh98a2d...
$sourceData = base64_to_image('data:image/png;base64,iVBORw0...');
$resultData = \Tinify\fromBuffer($sourceData)->toBuffer();

这个问题和你两小时前问的有什么不同?之前的问题是关于文件内容和toDataURL的不同。我曾试图采用你的两种解决方案为我工作,但我没能做到。我认为这是一种更好的方法,可以为它打开一个新的线程,并牢记具体的目标。我对你的另一个问题的回答指出了一个重要的事实:如果成功,
file\u获取内容('data:image/png;base64,iVBORw0KGgoA…)
生成您需要的数据。如果它不起作用,那么从这个问题的公认答案中,您所需要的就是
explode()
base64\u decode()
调用。剩下的都是垃圾(关于你的问题)。这个问题和你两小时前问的有什么不同?之前的问题是关于文件内容和toDataURL的不同。我曾试图采用你的两种解决方案为我工作,但我没能做到。我认为这是一种更好的方法,可以为它打开一个新的线程,并牢记具体的目标。我对你的另一个问题的回答指出了一个重要的事实:如果成功,
file\u获取内容('data:image/png;base64,iVBORw0KGgoA…)
生成您需要的数据。如果它不起作用,那么从这个问题的公认答案中,您所需要的就是
explode()
base64\u decode()
调用。其余的都是垃圾(关于你的问题)。