Сохранение холста в формате PNG или JPG
Я хочу сохранить canvas как PNG, не открывая его в новом окне как изображение с кодировкой base64.
Я использовал этот код:
jQuery("#btnPreview").click(function(){
if (!fabric.Canvas.supports('toDataURL')) {
alert('Sorry, your browser is not supported.');
}
else {
canvas.deactivateAll();
canvas.forEachObject(function(o){
if(o.get("title") == "||Watermark||"){
canvas.bringToFront(o);
}
});
window.open(canvas.toDataURL('png'), "");
canvas.forEachObject(function(o){
if(o.get("title") == "||Watermark||"){
canvas.sendToBack(o);
}
});
canvas.renderAll();
}
});
Я хочу, чтобы кнопка сохранила изображение как PNG или JPG.
Ответы
Ответ 1
Я использую это в своем jquery:
var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
$('.save').attr({
'download': 'YourProduct.png', /// set filename
'href' : image /// set data-uri
});
Ответ 2
canvas.toDataURL('png')
содержит строку a la data:image/png;base64,XYZ
. Вы можете записать это в <a href="%dataURI%" download>download</a>
(возможно, инициировать событие click для элемента). См. Загрузка ресурсов в HTML5: a [скачать]
В настоящее время поддерживается только Google Chrome.
Ответ 3
В script.js файле
$(document).on('click','#btnPreview',function(){
var img =$scope.canvas.toDataURL('image/png');
$.ajax({
type: "POST",
url: 'ajax.php',
data: {'img':img},
success: function(data) {
$("#loader_message").html("Image saved successfully");
}
});
});
В ajax.php
$encodedData=explode(',', $_POST["img"]);
$data = base64_decode($encodedData[1]);
$urlUploadImages = $_SERVER['DOCUMENT_ROOT'].$projName.'/images/canvas/';
$nameImage = "test.png";
$img = imagecreatefromstring($data);
if($img) {
imagepng($img, $urlUploadImages.$nameImage, 0);
imagedestroy($img);
echo "OK";
}
else {
echo 'ERROR';
}