我在ajax上传给base的base64字符串中有canvas生成的jpg。我有以下工作代码来执行数据:image / jpeg; base64到svg转换。
void sortArray(struct List list[]);
void sortArray(struct List* list, int n); // n = size of array
然而,我发现写文件是一个非常缓慢的过程并使我的文件系统混乱。我希望通过管道命令来消除写入过程,这样就不需要写入文件,但我不熟悉命令行。
Imagick将输入字符串限制为最多5000个字符,所以我不能这样做,因为一旦b64太长,它就会失败。
//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);
}
因此,我尝试执行以下操作将字符串包装到文本文件中,但由于内容不同且开头没有“data:image / jpeg; base64”,因此会失败。我也不想每次都写一个文本文件。
exec("convert inline:".$b64." ppm:- | potrace -s -o out.svg");
Q1:我有机会将b64字符串包装成临时文本文件作为想象的输入吗?
Q2:我想回复svg xml而不是将其下载为文件。再次,这写了一个新文件,虽然这更快。我希望有一种方法不能作为文件输出,而是像php中的变量或对象一样输出。
欢迎任何建议。谢谢。
答案 0 :(得分:0)
我不确定你是否在寻找这个:
获取上传图像的base64_encode(tmp图像):
$filename = $_FILES['image']['tmp_name'];
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));
$encoded_img = base64_encode($data);
答案 1 :(得分:0)
试试这个。,
$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);
答案 2 :(得分:0)
很抱歉回答这么老的问题,但我有点困惑,您为什么要尝试将 base64 编码的 JPG(raster 图像格式)转换为 SVG({{3 }} 图像格式)?
这行不通,最好的情况是,SVG 将只包含对原始 JPG 的引用。这就是你想要做的吗?