ابزار ویرایش تصویر در HTML
پنجشنبه 21 خرداد 1394یکی از مزایای ابزار سمت کاربر بودن نرم افزار این است که ترافیک سمت سرور را کاهش میدهد ، در این مقاله با استفاده از HTML5 یک ابزار برای ویرایش تصویر در سمت کاربر با ذکر مثال ایجاد می کنیم.

نکته : برای اجرای نرم افزار باید یک وب کم به سیستم خود متصل داشته باشد .
پس از اجرای نرم افزار , ابتدا تصویر خود را با استفاده از وب کم ذخیره یکنید , این عملیات با استفاده از Webcam.JS انجام میشود .شما می توانید اسکریپت مربوطه را از اینجا دریافت نمایید .
Webcam.JS : یک کتابخانه JavaScript میباشد که برای درج تصویر از وب کم استفاده میشود .
Add Sticker : برای افزودن برچسب , از این دستور استفاده می کنیم .
Add Border : برای افزودن حاشیه در اطاف تصویر از این دستور استفاده می کنیم .
Add Text : برای افزودن متن به همراه تصویر از این دستور استفاده می کنند .
Add Filter: برای افزودن فیلتر از این دستور استفاده می کنیم .مانند Contrast,Black & White و غیره .
Save and Send Email : آخرین ویرایش تصویر که ثبت و ارسال در آدرس نرم افزار استفاده میشود .همچنین می توانیم از این دستور برای ارسال ایمیل نیز استفاده کنیم .
برای این کار میتوانیم نرم افزار ویژوال استودیو را اجرا کنیم ، سپس یک web application ایجاد می کنیم .
هدف اصلی نرم افزار استفاده آسان از نرم افزار برای ثبت تصویر و ارسال آن از طریق ایمیل آدرس می باشد .
HTML5 : که نسخه جدید از HTML می باشد , همچنین HTML5 میتواند cross-platform را پشتیبانی کند ، که به این معنی میباشد که HTML5 هم میتواند pc,Tablet و smartphone های مختلف را پشتیبانی می کند .تگ html5 باید در داخل body ذکر شده قرار گیرد :
<!DOCTYPE html> <html> <body></body> </html>
برخی از امکانات جدید در HTML5 که شامل Canvas , Audio , Video میباشد .
Canvas : یک عنصر دو بعدی برای درج تصاویر توسط JavaScript میباشد .برای ایجاد تصاویر دو بعدی می بایست از JavaScript استفاده کنیم .
در ابتدا Refrence مورد نظر را به پروژه اضافه میکنیم .

برای افزودن امکان ثبت تصویر توسط وب کم در مرورگر کد زیر را در صفحه قرار میدهیم .
<table >
<tr>
<td align="center">
<div id="my_camera"></div>
<!-- Configure a few settings and attach camera -->
<script language="JavaScript">
Webcam.set({
width: 320,
height: 240,
image_format: 'jpeg',
jpeg_quality: 90
});
Webcam.attach('#my_camera');
</script>
</td>
</tr>
<tr>
<td align="center">
<input type=button value="Capture Photo" onClick="takePhoto()">
</td>
</tr>
</table>
برای ثبت تصویر ، در قسمت رویداد کلیک دکمه ثبت ، متد ()takePhoto را فراخوانی می کند ، که در این متد از متد webcam.js استفاده شده است .
function takePhoto() {
// take your photo and add the photo as canvas Background Image
Webcam.snap(function (data_uri) {
imageObj_BG.src = data_uri;
init('BG', '');
});
}
همچنین تگ زیر را در صفحه افزایش میکنیم
SECTION style="border-style: solid; border-width: 2px; width: 600px;"> <CANVAS HEIGHT="452" WIDTH="600px" ID="canvas">
مرورگر شما ممکن است که html5 را پشتیبانی نکند .همچنین می توانید مرورگر خود را از طریق تگ های زیر بررسی نمایید :
</CANVAS> </SECTION>
قسمت دستورات در JavaScript :
در ابتدا لینک منابع JavaScript و style صفحه در قسمت head صفحه قرار می دهیم .
<meta http-equiv="x-ua-compatible" content="IE=9" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <script type="text/javascript" src="Scripts/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="webcam.js"></script> <link href="Content/myStyle.css" rel="stylesheet" type="text/css" />
در ادامه مقادیر مربوط برای ویرایش تصویر را مشاهده می کنید .
<SCRIPT>
//public Canvas object to use in all the functions.
//Main canvas declaration
var canvas;
var ctx;
// canvas declaration photo filter add
var canvasEffect;
var ctxEffect;
//Width and Height of the canvas
var WIDTH = 600;
var HEIGHT = 452;
// var dragok = false;
//Global color variable which will be used to store the selected color name.
var Colors = "";
var newPaint = false;
var DrawingTypes = "";
//Circle default radius size
var radius = 30;
var radius_New = 30;
var stickerWidth = 40, stickerHeight = 40;
// Rectangle array
rect = {},
//drag= false defult to test for the draging
drag = false;
// Array to store all the old Shapes drawing details
var rectStartXArray = new Array();
var rectStartYArray = new Array();
var rectWArray = new Array();
var rectHArray = new Array();
var rectColor = new Array();
var DrawType_ARR = new Array();
var radius_ARR = new Array();
var Text_ARR = new Array();
//to add the Image this will be used to add all the stickers like Smiley,Animels,Flowers and etc
var ImageNames = new Array();
var imageCount = 0;
var imageObj = new Image();
var imageObj_BG = new Image();
var newImagename = '';
// For the Filters effects adde to photo like Contrast,Black&White and etc.
var isEffectadded = 'NO';
var EffectType = 'black';
var DrawBorder = "No";
//Clear the Canvas
function clear() {
ctx.clearRect(0, 0, WIDTH, HEIGHT);
}
متد () init :این متد یک متد مهم برای رویداد کلیک دکمه میباشد ، این تابع در هنگام ارسال هر نوع تابعی ، فراخوانی میشود .در این متد ما یک متغیر برای canvas ایجاد کرده ایم .
//Initialize the Canvas and Mouse events for Canvas
function init(DrawType, ImageName) {
newPaint = true;
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
canvasEffect = document.getElementById("canvas");
ctxEffect = canvasEffect.getContext("2d");
x = 5;
y = 5;
if (ImageName) {
ImageNames[imageCount] = ImageName;
imageCount = imageCount + 1;
}
DrawingTypes = DrawType;
if (DrawType = 'BG') {
ctx.drawImage(imageObj_BG, 1, 1, canvas.width - 1, canvas.height - 1);
}
if (DrawingTypes == 'Effects') {
isEffectadded = 'YES';
EffectType = ImageName;
Effects();
}
radius = 30;
radius_New = radius;
canvas.addEventListener('mousedown', mouseDown, false);
canvas.addEventListener('mouseup', mouseUp, false);
canvas.addEventListener('mousemove', mouseMove, false);
return setInterval(draw, 10);
}
افزودن تصویر ثبت شده به canvas
به عناون مثال ، برای افزودن تصویر به canvas ما باید متد takePhoto را فراخوانی کنیم .
<input type=button value="Capture Photo" onClick="takePhoto()">
سپس کد زیر را اضافه می کنیم :
function takePhoto() {
// take your photo and add the photo as canvas Background Image
Webcam.snap(function (data_uri) {
imageObj_BG.src = data_uri;
init('BG', '');
});
}
در این متد ما "BG" را فراخوانی کرده ایم ، و در متد ابتدایی ابتدا "DrawType="BG را بررسی میکند و اگر true باشد ، تصویر ثبت شده را در canvas قرار میدهد .
if (DrawType = 'BG') {
ctx.drawImage(imageObj_BG, 1, 1, canvas.width - 1, canvas.height - 1);
}
افزودن حاشیه / متن/ برچست به تصویر ثبت شده :
در رویداد کلیک دکمه مربوط به حاشیه ، ما DrawType را به عنوان "حاشیه" ارسال میکنیم و در رویداد MouseMove متد ()draw را فراخوانی میکنیم .
<img src="images/rect.png" onClick="init('Border','')" />
<img src="images/Font.png" onClick="init('DrawText','')" />
<img src="images/smily8.png" width="36" height="36" onClick="init('Images','images/smily8.png')"/>
<img src="images/smily9.png" width="36" height="36" onClick="init('Images','images/smily9.png')"/>
<img src="images/smily10.png" width="36" height="36"
onClick="init('Images','images/smily10.png')"/>
//Darw all Shaps,Text and add images
function draw() {
ctx.beginPath();
Colors = document.getElementById("SelectColor").value;
ctx.fillStyle = "#" + Colors;
switch (DrawingTypes) {
case "Border":
ctx.strokeStyle = "#" + Colors;
ctx.lineWidth = 10;
ctx.strokeRect(0, 0, canvas.width, canvas.height)
DrawBorder = "YES";
// ctx.rect(canvas.width - 4, 0, canvas.width - 4, canvas.height);
break;
case "Images":
imageObj.src = ImageNames[imageCount - 1];
ctx.drawImage(imageObj, rect.startX, rect.startY, rect.w, rect.h);
// ctx.drawImage(imageObj, rect.startX, rect.startY, stickerWidth, stickerHeight);
break;
case "DrawText":
ctx.font = '40pt Calibri';
ctx.fillText($('#txtInput').val(), drawx, drawy);
break;
}
ctx.fill();
// ctx.stroke();
}
افزودن فیلتر به تصویر :
برای افزودن فیلتر به تصویر ثبت شده ، باید یک تابع ایجاد کنیم :
<input type=button value="Black&White" onClick="init('Effects', 'black')"/>
<input type=button value="Contrast" onClick="init('Effects', 'contrast')"/>
<input type=button value="Invert Color" onClick="init('Effects', 'invertColors')"/>
<input type=button value="OriginalImage" onClick="init('Effects', 'OriginalImage')"/>
//Add alll Effects which we need to change for image
function Effects() {
if (isEffectadded == 'YES') {
var imgd = ctxEffect.getImageData(0, 0, canvas.width, canvas.height);
var pix = imgd.data;
switch (EffectType) {
case "black":
for (var i = 0, n = pix.length; i < n; i += 4) {
var grayscale = pix[i] * .3 + pix[i + 1] * .59 + pix[i + 2] * .11;
pix[i] = grayscale; // red
pix[i + 1] = grayscale; // green
pix[i + 2] = grayscale; // blue
// alpha
}
ctxEffect.putImageData(imgd, 0, 0);
break;
case "contrast":
var contrast = 40;
var factor = (259 * (contrast + 255)) / (255 * (259 - contrast));
for (var i = 0; i < pix.length; i += 4) {
pix[i] = factor * (pix[i] - 128) + 128;
pix[i + 1] = factor * (pix[i + 1] - 128) + 128;
pix[i + 2] = factor * (pix[i + 2] - 128) + 128;
}
// overwrite original image
ctxEffect.putImageData(imgd, 0, 0);
break;
case "invertColors":
for (var i = 0; i < pix.length; i += 4) {
// red
pix[i] = 255 - pix[i];
// green
pix[i + 1] = 255 - pix[i + 1];
// blue
pix[i + 2] = 255 - pix[i + 2];
}
// overwrite original image
ctxEffect.putImageData(imgd, 0, 0);
break;
case "OriginalImage":
for (var i = 0; i < pix.length; i += 4) {
// red
pix[i] = pix[i];
// green
pix[i + 1] = pix[i + 1];
// blue
pix[i + 2] = pix[i + 2];
}
// overwrite original image
ctxEffect.putImageData(imgd, 0, 0);
break;
}
}
}
نحوه ارسال تصویر از طریق ایمیل :
در رویداد کلیک دکمه "ارسال" دستورات زیر را می نویسیم :
<asp:Button ID="btnImage" runat="server" Text="Send Email"
OnClientClick = "sendEmail();return true;" onclick="btnImage_Click" />
function sendEmail() {
var m = confirm("Are you sure to Save ");
if (m) {
var image_NEW = document.getElementById("canvas").toDataURL("image/png");
image_NEW = image_NEW.replace('data:image/png;base64,', '');
$("#<%=hidImage.ClientID%>").val(image_NEW);
alert('Image saved to your root Folder and email send !');
}
}
در رویداد کلیک ، مقدار را از hidenfield دریافت میکنیم ، و در نتیجه ذخیره میکنیم .
protected void btnImage_Click(object sender, EventArgs e)
{
string imageData = this.hidImage.Value;
Random rnd = new Random();
string imagePath = HttpContext.Current.Server.MapPath("Shanuimg" + rnd.Next(12, 2000).ToString() + ".jpg");
using (FileStream fs = new FileStream(imagePath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imageData);
bw.Write(data);
bw.Close();
sendMail(imagePath);
}
}
}
در متد زیر محتوای ایمیل را به صورت قالب ارسال میکنیم که این قالب شامل موضوع ، تصویر و متن میباشد .
private void sendMail(string FilePath)
{
MailMessage message = new MailMessage();
SmtpClient smtpClient = new SmtpClient();
string msg = string.Empty;
try
{
MailAddress fromAddress = new MailAddress(txtFromEmail.Text.Trim());
message.From = fromAddress;
message.To.Add(txtToEmail.Text.Trim());
message.Attachments.Add(new Attachment(FilePath));
message.Subject = txtSub.Text.Trim();
message.IsBodyHtml = true;
message.Body = txtMessage.Text.Trim();
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = new System.Net.NetworkCredential(userGmailEmailID, userGmailPasswod);
smtpClient.Send(message);
msg = "Successful<BR>";
}
catch (Exception ex)
{
msg = ex.Message;
}
}
نحوه قرار دادن در facebook :
برای این کار ما به یک APPID احتیاج داریم ، برای ساخت اکانت باید به سایت https://developers.facebook.com مراجعه کنید و پس از ثبت نام و ورود به پنل کاربری ، 
اکنون شما App ID را ایجاد کرده اید که میتوانید از این طریق تصویر را در facebook ثبت کنید .

در قسمت Setting رقته ، آدرس وب سایت خود را اضافه می کنید :

همچنین در setting --> Advanced می بایست theEmbedded Browser را در حالت Yes قرار دهید .

در آخر در دستور رویداد دکمه "ارسال به Facebook" دستورات زیر را می نویسیم :
INPUT TYPE ="Button" id="btnFB" VALUE=" Send to FB " onClick="sendtoFB()">
function sendtoFB() {
var m = confirm("Are you sure Post in FaceBook ");
if (m) {
$.getScript('//connect.facebook.net/en_US/all.js', function () {
// Load the APP / SDK
FB.init({
appId: '398343823690176', // App ID from the App Dashboard
cookie: true, // set sessions cookies to allow your server to access the session?
xfbml: true, // parse XFBML tags on this page?
frictionlessRequests: true,
oauth: true
});
FB.login(function (response) {
if (response.authResponse) {
window.authToken = response.authResponse.accessToken;
PostImageToFacebook(window.authToken)
} else {
}
}, {
scope: 'publish_actions'
});
});
}
}
- ASP.net
- 2k بازدید
- 0 تشکر