Выполнение file_put_contents () для строки base64_decoded возвращает пустое изображение - PullRequest
1 голос
/ 30 января 2020

Я получаю от клиента изображение base64, и после этого я вызываю метод base64_to_image I через:

$barcode = base64_to_image( $barcodeBase64, ".jpg" );

, который вызывает метод:

function base64_to_image($base64_string, $type) {


    $data = substr($base64_string, strpos($base64_string, ',') + 1);

    if (!in_array($type, [ '.jpg', '.jpeg', '.gif', '.png' ])) {
        throw new \Exception('invalid image type');
    }

    $data = base64_decode($data);

    if ($data === false) {
        throw new \Exception('base64_decode failed');
    }


    $fullname = time().$type;

    if(file_put_contents($fullname, $data)){
        $result = $fullname;
    }else{
        $result =  "error";
    }

    return $result; 
}

Он генерирует изображение размером ~ 3 КБ и 0w x 0h. Я не знаю почему. Base64, который достигает строки сервера, таков:

data:image/svg+xml;base64,PHN2ZyBpZD0iYmFyY29kZSIgd2lkdGg9IjQ0MnB4IiBoZWlnaHQ9Ijg3cHgiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNDQyIDg3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMHB4KTsgZGlzcGxheTogbm9uZTsiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI0NDIiIGhlaWdodD0iODciIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsIDEwKSIgc3R5bGU9ImZpbGw6IzAwMDAwMDsiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI0IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iNiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIxMiIgeT0iMCIgd2lkdGg9IjYiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyMiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyNiIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIzNCIgeT0iMCIgd2lkdGg9IjYiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI0NCIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1NiIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI2NiIgeT0iMCIgd2lkdGg9IjYiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI3OCIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI4MiIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI4OCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIxMDAiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMTA0IiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjExMCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIxMTYiIHk9IjAiIHdpZHRoPSI4IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMTI2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjEzMiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIxMzYiIHk9IjAiIHdpZHRoPSI0IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMTQ0IiB5PSIwIiB3aWR0aD0iNiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjE1NCIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIxNjIiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMTY2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjE3NiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIxODIiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMTg2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjE5OCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyMTAiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMjE0IiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjIyMCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyMjYiIHk9IjAiIHdpZHRoPSI4IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMjM2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjI0MiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyNDYiIHk9IjAiIHdpZHRoPSI0IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMjU0IiB5PSIwIiB3aWR0aD0iNiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjI2NCIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyNzIiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMjc2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjI4NiIgeT0iMCIgd2lkdGg9IjYiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIyOTgiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMzAyIiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjMwOCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIzMjAiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMzI0IiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjMzMCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIzMzYiIHk9IjAiIHdpZHRoPSI4IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMzQ2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjM1MiIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIzNTYiIHk9IjAiIHdpZHRoPSI0IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMzY0IiB5PSIwIiB3aWR0aD0iNiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjM3NCIgeT0iMCIgd2lkdGg9IjIiIGhlaWdodD0iNTAiLz48cmVjdCB4PSIzNzgiIHk9IjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iMzg2IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjM5NiIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI0MDYiIHk9IjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjUwIi8+PHJlY3QgeD0iNDE0IiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSI1MCIvPjxyZWN0IHg9IjQxOCIgeT0iMCIgd2lkdGg9IjQiIGhlaWdodD0iNTAiLz48dGV4dCBzdHlsZT0iZm9udDogMTVweCBtb25vc3BhY2UiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIxMSIgeT0iNjciPjEyMzQgIDU2NzggIDkwMTIgIDM0NjUgIDc4OTAgIDEyMzQgIDU2NzggIDkwMTI8L3RleHQ+PC9nPjwvc3ZnPg==

Я что-то упустил / что-то не так?

EDIT Я могу правильно просмотреть строку base64, если Я ввел его в URL, также я дважды проверил, что это правильная строка после удаления data:image/svg+xml;base64,, поэтому я потерян = /

1 Ответ

0 голосов
/ 30 января 2020

Код SVG (пожалуйста, не сохраняйте изображения SVG с расширением .jpg, это просто ищет проблему) по некоторым причинам включает атрибут display: none;:

<svg id="barcode" width="442px" height="87px" x="0px" y="0px" viewBox="0 0 442 87" 
xmlns="http://www.w3.org/2000/svg" version="1.1" style="transform: translate(0px, 0px);
display: none;">

Если вы избавитесь от что отображается нормально. Вы можете, например, удалить с помощью JavaScript:

document.getElementById("barcode").style.display = "block";
<svg id="barcode" width="442px" height="87px" x="0px" y="0px" viewBox="0 0 442 87" xmlns="http://www.w3.org/2000/svg" version="1.1" style="transform: translate(0px, 0px); display: none;"><rect x="0" y="0" width="442" height="87" style="fill:#ffffff;"/><g transform="translate(10, 10)" style="fill:#000000;"><rect x="0" y="0" width="4" height="50"/><rect x="6" y="0" width="2" height="50"/><rect x="12" y="0" width="6" height="50"/><rect x="22" y="0" width="2" height="50"/><rect x="26" y="0" width="4" height="50"/><rect x="34" y="0" width="6" height="50"/><rect x="44" y="0" width="2" height="50"/><rect x="52" y="0" width="2" height="50"/><rect x="56" y="0" width="4" height="50"/><rect x="66" y="0" width="6" height="50"/><rect x="78" y="0" width="2" height="50"/><rect x="82" y="0" width="4" height="50"/><rect x="88" y="0" width="4" height="50"/><rect x="100" y="0" width="2" height="50"/><rect x="104" y="0" width="2" height="50"/><rect x="110" y="0" width="4" height="50"/><rect x="116" y="0" width="8" height="50"/><rect x="126" y="0" width="4" height="50"/><rect x="132" y="0" width="2" height="50"/><rect x="136" y="0" width="4" height="50"/><rect x="144" y="0" width="6" height="50"/><rect x="154" y="0" width="2" height="50"/><rect x="162" y="0" width="2" height="50"/><rect x="166" y="0" width="4" height="50"/><rect x="176" y="0" width="2" height="50"/><rect x="182" y="0" width="2" height="50"/><rect x="186" y="0" width="4" height="50"/><rect x="198" y="0" width="4" height="50"/><rect x="210" y="0" width="2" height="50"/><rect x="214" y="0" width="2" height="50"/><rect x="220" y="0" width="4" height="50"/><rect x="226" y="0" width="8" height="50"/><rect x="236" y="0" width="4" height="50"/><rect x="242" y="0" width="2" height="50"/><rect x="246" y="0" width="4" height="50"/><rect x="254" y="0" width="6" height="50"/><rect x="264" y="0" width="2" height="50"/><rect x="272" y="0" width="2" height="50"/><rect x="276" y="0" width="4" height="50"/><rect x="286" y="0" width="6" height="50"/><rect x="298" y="0" width="2" height="50"/><rect x="302" y="0" width="4" height="50"/><rect x="308" y="0" width="4" height="50"/><rect x="320" y="0" width="2" height="50"/><rect x="324" y="0" width="2" height="50"/><rect x="330" y="0" width="4" height="50"/><rect x="336" y="0" width="8" height="50"/><rect x="346" y="0" width="4" height="50"/><rect x="352" y="0" width="2" height="50"/><rect x="356" y="0" width="4" height="50"/><rect x="364" y="0" width="6" height="50"/><rect x="374" y="0" width="2" height="50"/><rect x="378" y="0" width="2" height="50"/><rect x="386" y="0" width="4" height="50"/><rect x="396" y="0" width="4" height="50"/><rect x="406" y="0" width="6" height="50"/><rect x="414" y="0" width="2" height="50"/><rect x="418" y="0" width="4" height="50"/><text style="font: 15px monospace" text-anchor="middle" x="211" y="67">1234  5678  9012  3465  7890  1234  5678  9012</text></g></svg>

Редактировать: Я только что понял, что Chrome в любом случае игнорирует атрибут, так что это решение, вероятно, применимо только к браузерам без webkit (он же Firefox и Inte rnet Explorer): -?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...