2016-03-08 3 views
1

У меня проблема с сохранением изображения холста на моем сервере. Я пробовал несколько вещей, и единственное, что, похоже, работает прямо сейчас, - это одно предложение, которое я нашел, оглядываясь вокруг, чтобы заполнить скрытое текстовое поле в форме и отправить его на мою php-страницу, которая может принять сообщение и преобразовать его и сохранить его на сервере. Хотя это действительно работает, оно отправляет только 1/8 изображения.Не удается сохранить полное изображение холста на сервер

Когда я проверяю содержимое toDataURL(), это то же количество данных, которое передается на страницу PHP, поэтому я не уверен, где изображение обрезается, а размер изображения составляет всего около 380 кб.

Вот что у меня есть:

Javascript:

var canvas = document.getElementById("myCanvas"); 
var image = canvas.toDataURL(); 
document.getElementById("savecarddata").value = image; 

PHP

$upload_dir = 'mydirectory'; 
$img = $_POST['savecarddata']; 
$img = str_replace('data:image/png;base64,', '', $img); 
$img = str_replace(' ', '+', $img); 
$data = base64_decode($img); 
$file = $upload_dir.rand().".png"; 
$success = file_put_contents($file, $data); 

Это сохранить изображение, а только его верхнюю часть. Я пробовал ajax, но я не могу заставить его работать правильно, так что это было лучшее для меня решение. Я хотел бы помочь!

Заранее благодарен!

+0

Я обнаружил, что если уменьшить размер изображения, я могу получить все изображение, но разрешение ужасно, а текст не читается. – user3817119

+0

Это может помочь: http://stackoverflow.com/a/13198699/1599191 –

ответ

0

Я не знаю, если это актуально, но проверьте, как вы устанавливаете ширину и высоту холста. Вы должны установить их внутри тега canvas.

<canvas width='yourValue' height='yourValue'></canvas> 
+0

Я знаю, что холст установлен очень большой, но это связано прежде всего с тем, что если я делаю это меньше (то есть 300x420), в то время как я сохраняю все изображение, он размыт, поэтому я увеличил его и уменьшил его с помощью div (.25), чтобы он выглядел нужного размера. К сожалению, это не позволяет мне сохранить изображение, которое является большим (1200X 1680) – user3817119

1

Это, как я это сделал:

Использование Ajax

var canvas = document.getElementById("myCanvas"); 
    var canvasData = canvas.toDataURL('image/png'); 
    var ajax = new XMLHttpRequest();    
    var postdata='saveimage.php'; 
    ajax.open('POST', postdata, false); 
    ajax.setRequestHeader('Content-Type', 'application/upload'); 
    ajax.send(canvasData); 

затем в saveimage.php

if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) 
{ 
$imgdata = $GLOBALS['HTTP_RAW_POST_DATA']; 

    $filteredData=substr($imgdata, strpos($imgdata, ",")+1);// Remove the headers (data:,) part. 
    $data = base64_decode($filteredData);//decode data 
    $im = imagecreatefromstring($data); //create image 
    if ($im !== false) { 
     imagesavealpha($im, true); 
     imagepng($im, "result.png",9); 
    } 
    else { 
     echo 'An error occurred.'; 
    } 

    } 

вы также можете передать аргументы как GET переменных в AJAX

var postdata="saveimage.php?imagename=" + document.getElementById("someFeild").value; 
+0

По какой-то причине независимо от того, насколько я пытаюсь использовать ajax, я не могу получить код правильно. Я ценю это предложение. Я не уверен, правильно ли я правильно установил путь или что. У меня есть файл saveimage.php с этим кодом и соответствующие теги и javascript, размещенные на моей веб-странице. Я пытаюсь получить правильный путь к файлу saveimage и папке загрузки. Я думаю, что это может быть проблемой. Мне придется поиграть с этим. Могу ли я поместить полный URL-адрес в эти места, чтобы напрямую перейти туда, где я хочу, чтобы сценарий пошел? – user3817119

+0

Я отредактировал свой ответ. Мои извинения, это было в значительной степени скопировано из кода моего сайта, в котором я использую библиотеку, построенную на элементе canvas. Для метода 'toDataURL ('image/png')' требуется объект canvas (который ранее был как «layer»). – user3479671

+0

Это потрясающе ... Работает как шарм .... –

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