10

私は現在、PHPでbase64画像をデコードするために次のことを行っています。

   $img = str_replace('data:image/jpeg;base64,', '', $s['image']);
   $img = str_replace('data:image/png;base64,', '', $s['image']);
   $img = str_replace('data:image/gif;base64,', '', $s['image']);
   $img = str_replace('data:image/bmp;base64,', '', $s['image']);
   $img = str_replace(' ', '+', $img);
   $data = base64_decode($img);

上記のように、最も標準的な4つの画像タイプ(jpeg、png、gif、bmp)を受け入れています。

ただし、これらの画像の一部は非常に大きく、str_replaceを使用して各画像を4〜5回スキャンすることは、非常に無駄であり、非常に非効率的です。

1回のパスでbase64画像文字列のdata:image部分を確実に削除する方法はありますか?おそらく、文字列の最初のコンマを検出することによって?

これが単純な問題である場合は、申し訳ありませんが、PHPは私の得意ではありません。前もって感謝します。

4

5 に答える 5

30

正規表現を使用できます。

$img = preg_replace('#data:image/[^;]+;base64,#', '', $s['image']);

置換するテキストが画像の最初のテキストである場合^、正規表現の先頭に追加すると、画像全体ではなく最初の数文字のみが分析されるため、はるかに高速になります。

$img = preg_replace('#^data:image/[^;]+;base64,#', '', $s['image']);
于 2013-03-08T09:58:05.023 に答える
0

テストする必要がありますが、このソリューションは Mihai Iorga のソリューションよりもわずかに高速であると思います

$offset = str_pos($s['image'], ',');
$data = base64_decode(substr($s['image'], $offset));
于 2013-03-08T09:58:50.387 に答える
0

javascript/kendo で画像を生成し、これを ajax でサーバーに送信します。

preg_replace('#^data:image/[^;]+;base64,#', '', $s['image']); 

この場合は機能しません。私の場合、このコードはよりうまく機能します:

$contentType  = mime_content_type($s['image']);
$img = preg_replace('#^data:image/(.*?);base64,#i', '$2', $s['image']);
于 2018-10-12T15:38:26.310 に答える