2013-05-15 2 views
2

Я пытаюсь создать изображение в каталоге загрузок моего сервера из кода base64, отправленного с клиентской стороны. Ниже приводится код же:png изображение обрезается при сохранении с base64_decode

<?php 
    $dataURI = $_REQUEST['dataURI']; 

    $dataURI = str_replace('data:image/png;base64,', '', $dataURI); 
    $dataURI = str_replace(' ', '+', $dataURI); 

    $data = base64_decode($dataURI); 

    // $filename = UPLOAD_DIR . uniqid() . '.png'; 
    $filename = UPLOAD_DIR . 'saved-image' . '.png'; 

    $status = file_put_contents($filename, $data); 

?> 

образ успешно создан, но по какой-то причине изображение обрезается до половины (по горизонтали). Может ли кто-нибудь сказать мне, что в этом плохого?

Ниже оригинал и сохранить/созданный образ:

Исходное изображение

создания изображения

+1

Может быть, длина строки усечена? –

+1

Что сказал @Luke - как вы отправляете его на сервер? Не используйте '$ _REQUEST' - явно выберите один из методов, в этом случае убедитесь, что он' $ _POST', поскольку он будет иметь более высокий предел. – Emissary

+0

Спасибо. Попробуй и опубликуй здесь. – ggauravr

ответ

1

Вы получаете данные через параметр HTTP. Те acutally ограничены по размеру (например, по умолчанию для Apache будет. Этот предел варьируется между веб-серверами и обычно может Пе установлен в серверной конфигурации.

Также обратите внимание, что PHP имеет post_max_size в php.ini, который по умолчанию является 2MB

+0

@Martin .. Спасибо за информацию. Но ограничение в моем файле php.ini оказалось равным 8M .. будет проверять конфигурацию apache, если таковая имеется. – ggauravr

1

Вы, наверное, есть какие-то проблемы с кодировкой:.

$dataURI = str_replace(' ', '+', $dataURI); 

Выглядит как попытка здесь, чтобы отменить замену + с которая произошла где-то -Большая вероятно, это было urldecoded / косая черта характера также часть набора символов base64, и поэтому я подозреваю, что все испорченные символы + также испортили их.

Что бы я сделал, это тщательно проследить происхождение этих данных и наблюдать за произведенными преобразованиями.

+0

Он не отменяет '+', а заменяет пробел символом '+'. см. php.net: 'mixed str_replace (смешанный $ search, mixed $ replace, mixed $ subject [, int & $ count])' –

+0

, чтобы сказать иначе: до того, как этот код был выполнен, что-то заменило символ base64 '+' на пространство - скорее всего, некоторое urldecoding. Он использовал str_replace, чтобы отменить это, но без реального изучения более глубокой причины * почему * это было необходимо. –

+0

@PaulDixon .. как вы сказали, я не углублялся в то, почему это было сделано .. просто изучал материал и получил этот фрагмент из какого-то блога. но переключение этой строки кода не влияет на созданный образ. – ggauravr

0

Подтвердите, что вы пишете текстовый файл и НЕ к базе данных. Недавно я переключал назад и вперед, пытаясь устранить эту проблему. Оказалось, что мой тип столбца базы данных, который был установлен в text, был недостаточно велик для хранения изображения. Мои образы возвращались, как у вас. Я переключился на longtext, и это исправило мою проблему.

Смежные вопросы