簡體   English   中英

將base64字符串圖像從上載轉換為SVG,而無需寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM