Bu yazımda sayfamızdaki html elementlerini nasıl resim olarak kayıt edeceğimizden bahsedeceğim.
Örneğin web sayfaımızda bir div etiketini resim olarak kaydetmek istiyoruz bunu yapmak için html2canvas kütüphanesinden faydalanacağız.
İlk olarak basit bir MVC projesi oluşturalım. ASP .Net MVC No Authentication bir proje oluşturalım.
Okurken ne dinlemeli :
Senaryomuz şu şekilde olacak: Ana sayfamızda yer alan test2 id'li div'i resim olarak kaydedeceğiz.
Proje oluştuktan Index sayfamızın view'ini oluşturarak devam edelim.
@{
ViewBag.Title = "Home Page";
}
<div
class="row">
<h2>Convert your html divs to
image.</h2>
</div>
<div class="row">
<div id="test2" style="background:black;width:700px;">
<img src="../img/iron-man-2.jpg" />
<br />
<p style="color:white;font-size:34px;">Hello ,I am Iron Man.</p>
</div>
</div>
…
<br />
<div>
<input type="submit" id="create_image" name="create" class="btn btn-primary btn-lg" style="width:100%;" value="Create Image" onclick="CreateImage()" />
</div>
<br />
<div>
<input type="submit" id="create_image" name="create" class="btn btn-primary btn-lg" style="width:100%;" value="Create Image" onclick="CreateImage()" />
</div>
ve bu sayfa için ön tarafta jquery ile div'i yakalamak için aşagıdaki script'i ındex sayfamıza ekleyelim.
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/html2canvas.min.js")"></script>
<script type="text/javascript">
function CreateImage() {
html2canvas($("#test2")[0]).then(function (canvas) {
var base64 = canvas.toDataURL();
$.ajax({
method: "POST",
url: '@Url.Content("~/Home/CreateImage")',
data: { 'imagedata': base64 },
success: function (res) {
var jtext = JSON.stringify(res);
var returnedData =
JSON.parse(jtext);
if (returnedData.Code == true || returnedData.Code == 'true') {
alert("Image Saved");
} else {
alert("Fail! " + returnedData.Description);
location.reload();
}
}, error: function (x, h, r) {
alert(x + h + r);
}
});
});
return false;
}
</script>
Önce jquery daha sonra html2canvas .js'lerini sayfaya import ettik ve bu sayede canvastoDataURL ile base64 türünden oluşan resmin kodlarını almış olduk. Aldığımız base64 datayı controllere aktarıp resim olarak kaydetmek için bir ajax çağrısı yaptık.Parametre olarak da base64 datasını yolladık.
Kontroller tarafını kodlayalım. HomeController'de:
public ActionResult Index()
{
return View();
}
public class CustomJsonResult
{
public bool Code { get; set; }
public string Description { get; set; }
}
[HttpPost]
public ActionResult CreateImage(string imagedata)
{
CustomJsonResult result = new CustomJsonResult();
result.Code = false;
result.Description = "";
try
{
imagedata = imagedata.Split(',')[1];
string fileName = "MyUniqueImageFileName_"+DateTime.Now.ToString("dd_MM_yyyy_HH_mm_ss")+".jpg";
string fileNameWitPath = Path.Combine(Server.MapPath("~/FolderToSave"), fileName);
using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imagedata);
bw.Write(data);
bw.Close();
}
fs.Close();
}
result.Code = true;
}
catch
(Exception ex)
{
result.Description =
ex.ToString();
}
return Json(result, JsonRequestBehavior.AllowGet);
}
Hiç yorum yok:
Yorum Gönder