У меня есть холст, сгенерированный jpg в base64 string, загруженный ajax на php. У меня есть следующий рабочий код для выполнения данных: image/jpeg; base64 - преобразование svg.Преобразование 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");
Итак, я попытался сделать следующее, чтобы обернуть строку в текстовый файл, но он не так как содержание отличается, и без «данные: изображения/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);
}
}
Q1: Любой шанс, что я могу обернуть строку b64 в текстовый файл temp в качестве входного сигнала для воображения?
Q2: Я хочу, чтобы echo обратно svg xml вместо загрузки его в файл. И снова, это пишет новый файл, хотя это быстрее. Я надеюсь, что есть метод, который не выводится как файл, а как переменная или объект вроде вещи в php.
Любые предложения приветствуются. Спасибо.
Спасибо за ваш ответ. Загруженные данные представляют собой строку base64 URI, сгенерированную методом Canvas toDataURL(), а не файл .jpg. –