2016-03-22 15 views
1

Kullanarak bir görüntünün kodunu çözme ve kaydetme Bir kullanıcı, bir düzen oluşturmak için bir div üzerine sürükleyip bırakma işlemini içeren bir proje üzerinde çalışıyorum. Kullanıcı bittiğinde, div'u alan ve html2canvas'ı kullanarak bir tuval öğesi oluşturan bir düğme vardır, ardından görüntü olarak yeni bir pencerede açılır. Bu iyi, ama bir yere kaydetmek için ihtiyacım var, böylece bir e-postaya eklenebilir ve gönderilebilir. Şimdiye kadar sahip olduğum tek şey, gerçekten hiçbir şey yapamayacağım base64 kodlu dizedir. js tarafında Canvas.toDataURL()

, ben:

#canvas div kimliğidir
html2canvas($('#canvas')).then(function(canvas) { 
    $('canvas').addClass('canvas-layout'); 
    var src = canvas.toDataURL(); 
    var output=src.replace(/^data:image\/(png|jpg);base64,/, ""); 
    $.post('result.php', { data: output }) 
     .done(function(response) { 
      console.log(response); 
     } 
    ); 
    return false; 
}); 

.

$decodedData = base64_decode($_POST['data']); 

$img = $decodedData; 

$image = fopen($img, 'r'); 
file_put_contents("images/layout.png", $image); 
fclose($image); 

Ama bir uyarı I) (fopen bir dize geçiyorum söyleyerek olsun - bu çözüm başka stackoverflow sonrası verilen ve olmasına rağmen insanlar bu olsun gibiydi: result.php dosyasında, ben Çalışma. Başlangıçta, js sadece bu yüzden gibi yeni bir pencerede görüntüyü açtı:

window.open(src,'Image','width=1440,height=650,resizable=1'); 

Ama tarayıcı penceresinde URL'yi ile bir şey yapamaz base64 kodlanmış dizedir.

Elde etmek istediklerimi gerçekleştirmenin bir yolu var mı?

Teşekkürler

+0

Bu php kodunu nereden aldığınızı gösterebilir misiniz? Oldukça eminim ki $ img '$ decodedData' içinde değil. http://php.net/manual/en/function.fopen.php – Kaiido

+0

http://stackoverflow.com/a/8848250/5194337 - belki de daha önce görüntüyü doğru şekilde kodlamak için yapmanız gereken başka bir şey var ajax dosyasına geçti mi? –

+0

En etkili ve çok yönlü çözüm, JavaScript'i olduğu gibi 'canvas.toDataURL() 'olarak göndermektir. Daha sonra PHP parçasını [PHP-FileUpload] (https://github.com/delight-im/PHP-FileUpload/tree/master) ve ['DataUriUpload'] 'a çağırın (https://github.com). /delight-im/PHP-FileUpload/blob/7c950635cbd45ade9fb2656eb285259dc2a8f0fb/src/DataUriUpload.php) tüm ağır yükleri kaldıran ve daha fazla kontrol ve doğrulama aracı sağlayan bileşen. [Burada belgelenmiştir] (https://github.com/delight-im/PHP-FileUpload/blob/master/README.md#data-uri-uploads). – caw

cevap

0

Tamam - Sıralamalarım var. Temel olarak, yazabilmemiz için dizeden başka bazı verileri kırpmam gerekiyordu.

Yani, file_put_contents önce bu kodu eklendi:

$img = $_POST['data']; // Using the raw encoded string 
$img = str_replace('data:image/png;base64,', '', $img); // removed unnecessary string 
$img = str_replace(' ', '+', $img); 
$data = base64_decode($img); // then decoded it 
$file = "images/layout-file_". uniqid().".png"; // define new image name 
$success = file_put_contents($file, $data); // finally write to server 

o benzersiz adlı dosyayı oluşturur ve bozuk değil Bu şekilde.

İlgili konular