[英]Convert base64 string image from upload to SVG without writing file
我有由ajax上传到php的base64字符串中的canvas生成的jpg。 我有以下工作代码来执行data:image / jpeg; base64到svg的转换。
//Uploaded is a string start from data:image/jpeg;base64,...(not a .jpg)
$b64 = (isset($_POST['img']) ? $_POST['img'] : null);
if($b64){
$b64= str_replace('data:image/jpeg;base64,', '', $b64);
$b64= str_replace(' ', '+', $b64);
$im = new Imagick();
$im->readImageBlob(base64_decode($b64));
$im->trimImage(2000);
$im->setImageFormat( "ppm" );
$im->writeImage( "out.ppm" );
$cmd = exec("potrace out.ppm -s -o out.svg 2>&1", $output, $e);
}
但是,我发现写入文件是一个非常缓慢的过程,并使我的文件系统混乱。 我想通过管道化命令来消除写入过程,因此不需要写入文件,但是我对命令行不熟悉。
Imagick将输入字符串限制为5000个字符,所以我不能这样做,因为一旦b64过长,它就会失败。
exec("convert inline:".$b64." ppm:- | potrace -s -o out.svg");
因此,我尝试执行以下操作以将字符串包装到文本文件中,但由于内容不同并且开始时没有“ data:image / jpeg; base64”,因此失败。 我也不想每次都写一个文本文件。
if(strlen($b64)> 4000){
$arr = str_split($b64, 4000);
foreach ($arr as $key => $a) {
$test = exec("echo ".$a." >> out.b64 2>&1", $output, $e);
}
}
问题1:是否有可能将b64字符串包装到临时文本文件中作为imagick的输入?
Q2:我想回显svg xml,而不是将其下载为文件。 同样,这会写入一个新文件,尽管速度更快。 我希望有一种方法不以文件形式输出,而是以变量或对象形式输出,例如php。
欢迎任何建议。 谢谢。
尝试这个。,
$base64_str = str_replace('data:image/png;base64,', '', $b64);
$base64_str = str_replace(' ', '+', $base64_str);
$decoded = base64_decode($base64_str);
$targetPath ="../your target path/";
$png_url ="../your target path/"."product-".strtotime('now').".png";
$image_name ="product-".strtotime('now').".png";
$result = file_put_contents($png_url, $decoded);
我不确定您是否在寻找这个:
获取上传的图像(tmp图像)的base64_encode:
$filename = $_FILES['image']['tmp_name'];
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));
$encoded_img = base64_encode($data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.