国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 擴(kuò)展 > jQuery > 正文

Asp.Net+flash+jquery.TY.js涂鴉插件,可保存涂鴉圖片

2024-09-06 20:04:30
字體:
供稿:網(wǎng)友

  20132-20更新:增加了加載圖片的縮放功能。將縮放后的寬度傳到動(dòng)態(tài)頁,動(dòng)態(tài)頁獲取后重新計(jì)算坐標(biāo)位置后繪圖。如果涂鴉不和圖片合成,當(dāng)寬度小于默認(rèn)的650,繪制一條分隔線。

  Asp.Net+flash+jquery實(shí)現(xiàn)的在線涂鴉插件,通過將涂鴉數(shù)據(jù)發(fā)送到ashx頁面,ashx獲取到數(shù)據(jù)后繪制圖片并保存涂鴉圖片。

  本示例基于謾軻(Manction),http://manction.51.com簡易涂鴉板修改,增加了重做,畫筆顏色,大小和透明度,保存功能。

  flash可以加載指定的站內(nèi)圖片進(jìn)行涂鴉,保存后繪制的數(shù)據(jù)和原始圖片合并生成新涂鴉圖片

  示例

  效果如下

Asp.Net+flash+jquery.TY.js涂鴉插件,可保存涂鴉圖片

test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.7.1/jquery.min.js"></script><title>Asp.Net+flash+jquery.TY.js涂鴉插件,可保存涂鴉圖片</title><meta content="在線涂鴉,保存涂鴉圖片,asp.net保存涂鴉,flash涂鴉" name="Keywords"/><meta content="Asp.Net+flash+jquery實(shí)現(xiàn)的在線涂鴉插件,通過將涂鴉數(shù)據(jù)發(fā)送到ashx頁面,通過asp.net繪制圖片。" name="description"/><script type="text/javascript">window.onload=function(){    (function ($) {        //cfg配置說明,JSON對象        //swf:涂鴉swf文件路徑,默認(rèn)值為:ty.swf        //height:高度,默認(rèn)值為400,高度小于400會隱藏flash起來,最終生成的涂鴉圖片高度基于這個(gè)值。如果指定img將會忽略此配置,依據(jù)原始圖片尺寸        //width:寬度,默認(rèn)值:650。注意:這里的寬度是最終生成的圖片寬度,不會改變UI的寬度,因?yàn)樾∮?50會導(dǎo)致菜單顯示不全。最終生成的涂鴉圖片高度基于這個(gè)值。如果指定img將會忽略此配置,依據(jù)原始圖片尺寸        //img:flash要加載的圖片,繪制的涂鴉信息和此圖片合成,默認(rèn)不加載圖片。只能加載站內(nèi)圖片,站外圖片動(dòng)態(tài)頁沒有添加圖片下載功能        //url:繪圖的涂鴉數(shù)據(jù)提交到的頁面,如果要保存圖片一定要傳遞此配置,否則無法保存圖片,不保存圖片時(shí)url,success和error回調(diào)可以不傳遞        //success:保存涂鴉時(shí)成功的回調(diào)函數(shù),回調(diào)中的this為容器div對象,參數(shù)為返回的json對象        //error:保存涂鴉失敗時(shí)回調(diào)函數(shù),回調(diào)中this為容器div對象,參數(shù)為返回的json對象        //data:ajax提交時(shí)附加的參數(shù),JSON對象,如數(shù)據(jù)庫中對應(yīng)ID什么的        //debug:如果為true,則輸出xhr返回的responseText信息        //ext:保存圖片擴(kuò)展名,默認(rèn)為jpg,不帶.        //wstep:如果傳遞了img,每次縮放圖片寬度的大小,默認(rèn)20。高度依據(jù)圖片原始尺寸等比算出        $.fn.TY = function (cfg) {            var cbPrefix = 'doPost', cbMark = 'mark', tm, ie = !!document.all;            function FlashVars(config) {                var s = '';                if (config.cbName) s += '&cb=' + config.cbName;                if (config.markName) s += '&mk=' + config.markName;                if (config.img) s += '&img=' + config.img;                else if (config.width < 650) s += '&spl=' + config.width; //寬度小于UI寬度則傳遞此參數(shù)給flash繪制分隔線                if (config.wstep) s += '&wstep=' + config.wstep;                return s == '' ? '' : s.substring(1);            }            return this.each(function () {                var me = $(this), config = $.extend({ swf: 'ty.swf', height: 400, width: 650, ext: 'jpg', wstep: 20 }, cfg);                tm = new Date().getTime();                if (config.url) { //需要保存涂鴉圖片則注冊flash調(diào)用的javascript方法                    config.cbName = cbPrefix + tm;                    //drawdata,字符串,結(jié)構(gòu):[{data:[[x,y],[x,y]...],lw:線條寬,color:線條顏色,alpha:線條透明度}.....]                    //newwidth:縮放后圖片寬度,發(fā)送到服務(wù)器用于計(jì)算縮放比率,矯正坐標(biāo)用的,不是圖片忽略次參數(shù)                    window[config.cbName] = function (drawdata, newwidth) {                        if (!drawdata) alert('沒有繪制涂鴉信息!');                        else {                            window[config.markName]('正在保存圖片...');                            var data = cfg.data ? cfg.data : {};                            data.w = config.width; data.h = config.height; data.ext = config.ext; data.newwidth = newwidth;                            if (config.img) data.img = config.img; //這個(gè)也可以不傳,可以通過讀取數(shù)據(jù)庫獲取到原始圖片地址什么的,但是data對象要配置有記錄的ID                            data.drawdata = drawdata;                            $.ajax({ url: config.url, type: 'POST', data: data, complete: function (xhr) {                                window[config.markName]('none');                                var r;                                if (200 == xhr.status) try { r = eval('(' + xhr.responseText + ')'); } catch (ex) { r = { success: false, err: '返回的JSON格式不正確!' + (config.debug ? '/n/n' + xhr.responseText : '') }; }                                else r = { success: false, err: 404 == xhr.status ? '動(dòng)態(tài)頁路徑不對!' : '動(dòng)態(tài)頁發(fā)生錯(cuò)誤!' + (config.debug ? '/n/n' + xhr.responseText : '') };                                if (r.success) {                                    if (config.success) config.success.call(me.get(0), r);                                }                                else if (config.error) config.error.call(me.get(0), r);                            }                            });                        }                    }                }                if (config.img || cfg.url) {                    config.markName = cbMark + tm;                    window[config.markName] = function (display) {                        if (display == 'none') me.find('div').hide();                        else { me.find('div:last').html(display); me.find('div').show(); }                    }                }                me.css({ width: 650, height: config.height, overflow: 'hidden', position: 'relative', border: 'solid 1px #000000' }).append(                ie ? '<object id="swf' + tm + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="650px" height="400px">'                + '<param name="src" value="' + config.swf + '"><param name="FlashVars" value="' + FlashVars(config) + '"><param name="wmode" value="transparent"></object>'                : '<embed width="650px" height="400px" id="swf' + tm + '" type="application/x-shockwave-flash" src="' + config.swf + '?' + FlashVars(config) + '" wmode="transparent"/>');                if (config.img || cfg.url) {                    me.append('<div style="background:#000000;' + (config.img ? '' : 'display:none;') + 'filter:alpha(opacity:50);opacity:.5;width:100%;height:100%;position:absolute;left:0px;height:100%;top:0px;"></div>');                    me.append('<div style="position:absolute;left:43%;top:45%;color:#ffffff;' + (config.img ? '' : 'display:none;') + '">正在加載加載...</div>');                }            });        };    })(jQuery);        $('#dvTY').TY({            height: 300,            width:200,            img: '/imgdesign/ty/123.jpg',            url: '/imgdesign/ty/save.ashx',            swf: '/imgdesign/ty/ty.swf',            data: { id: 123 }, //附加數(shù)據(jù)            debug: true,            success: function (d) {                alert('涂鴉保存成功!');                $('#dvRst').html('<a href="/imgdesign/ty/' + d.fn + '" target="_blank">點(diǎn)擊查看圖片</a>');            },            error: function (d) {                alert(d.err);            }        });    }</script></head><body><div id="dvTY"></div><div id="dvRst"></div></body></html>

save.ashx

<%@ WebHandler Language="C#" Class="save" %>using System;using System.Web;using System.Drawing;using Newtonsoft.Json;using System.Collections.Generic;using System.IO;using System.Text.RegularExpressions;public class save : IHttpHandler {    //drawdata結(jié)構(gòu):[{data:[[x,y],[x,y]...],lw:線條寬,color:線條顏色,alpha:線條透明度}.....]    //每條線的信息    public class DrawData    {        private List<float[]> _data;        private int _lw;        private int _alpha;        private string _color;        /// <summary>        /// 線條信息        /// </summary>        public List<float[]> data { get { return _data; } set { _data = value; } }        /// <summary>        /// 畫筆寬        /// </summary>        public int lw { get { return _lw; } set { _lw = value; } }        /// <summary>        /// 畫筆透明度,C#下是0~255,需要轉(zhuǎn)換一下        /// </summary>        public int alpha { get { return (int)Math.Floor(_alpha * 2.55); } set { _alpha = value; } }        /// <summary>        /// 畫筆顏色        /// </summary>        public string color { get { return _color; } set { _color = value; } }    }    /// <summary>    /// 線條數(shù)組轉(zhuǎn)換為頂點(diǎn)數(shù)組    /// </summary>    /// <param name="data">線條數(shù)據(jù)</param>    /// <param name="IsImg">繪制在圖片上,不在25~h+25范圍內(nèi)的數(shù)據(jù)去掉</param>    /// <param name="h">圖片高</param>    /// <param name="w">圖片寬</param>    /// <param name="newwidth">flash中縮放后的寬,不是繪制在圖片上忽略</param>    /// <returns></returns>    protected PointF[] GetPointFs(List<float[]> data, bool IsImg, float h, float w, float newwidth)    {        float top = IsImg ? 25 : 0, scale = IsImg ? w / newwidth : 1;//坐標(biāo)點(diǎn)縮放比率,不是圖片忽略此設(shè)置        List<PointF> points = new List<PointF>();        foreach (float[] d in data)        {            points.Add(new PointF(d[0] * scale, (d[1] - top) * scale));        }        return points.ToArray();    }    public void ProcessRequest(HttpContext context)    {        string img = context.Request.Form["img"], w = context.Request.Form["w"], h = context.Request.Form["h"]            , drawdata = context.Request.Form["drawdata"], newwidth = context.Request.Form["newwidth"]            , fn = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + context.Request.Form["ext"];//新文件名        Regex rxInt = new Regex(@"^/d+$", RegexOptions.Compiled);        List<DrawData> data = (List<DrawData>)JsonConvert.DeserializeObject(drawdata, typeof(List<DrawData>));        Bitmap bm;        bool IsImg = false;        float fW = 0, fH = 0, fNewWidth = 0;        if (!string.IsNullOrEmpty(img) && File.Exists(context.Server.MapPath(img)))        {//存在圖片            bm = new Bitmap(context.Server.MapPath(img));            IsImg = true;            fW = bm.Width;            fH = bm.Height;            if (!string.IsNullOrEmpty(newwidth) && rxInt.IsMatch(newwidth)) fNewWidth = float.Parse(newwidth);            else fNewWidth = fW;        }        else        {            fW = !string.IsNullOrEmpty(w) && rxInt.IsMatch(w) ? float.Parse(w) : 650;            fH = !string.IsNullOrEmpty(h) && rxInt.IsMatch(h) ? float.Parse(h) : 400;            bm = new Bitmap((int)fW, (int)fH);        }        Color color = Color.White;        using (Graphics g = Graphics.FromImage(bm))        {            foreach (DrawData d in data)            {                color = Color.FromArgb(d.alpha, ColorTranslator.FromHtml("#" + d.color));                using (Pen pen = new Pen(color, d.lw))                {                    g.DrawLines(pen, GetPointFs(d.data, IsImg, fH, fW, fNewWidth));                }            }        }        bm.Save(context.Server.MapPath(fn));        bm.Dispose();        context.Response.Write("{success:true,fn:'" + fn + "',xsc:'" + ((float)fW / (float)fNewWidth).ToString() + "|" + newwidth + "'}");    }     public bool IsReusable {        get {            return false;        }    }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
欧美日韩亚洲第一页| 国产专区在线| 中文字幕不卡免费视频| jizz一区二区三区| 国产一二三区在线视频| 激情小说 在线视频| japanese色国产在线看视频| 亚洲网站一区| 亚洲夜夜综合| 亚洲最新永久观看在线| 在线观看精品视频一区二区三区 | 久久国产热视频| 奇米影视狠狠狠| 免费一区二区三区视频狠狠| 丁香视频免费观看| 快射av在线播放一区| 免费男女羞羞的视频网站中文字幕| 开心丁香婷婷深爱五月| 国产麻豆精品视频一区二区 | 国产蜜臀在线| 久草电影在线| www网站在线观看| 欧美卡一卡二| 国产高清自拍视频在线观看 | av丝袜在线| 国产毛片在线看| 永久免费在线观看| 小说区乱图片区| 丁香花视频在线观看| 国产三级视频在线看| 99在线欧洲视频| 黄网址在线永久免费观看| 天天操天天射天天插| 中文字幕久热在线精品| av文字幕在线观看| 国产变态拳头交视频一区二区 | 国产欧美日本亚洲精品一4区| 日本电影全部在线观看网站视频| 国产无遮挡又黄又爽免费网站 | 黄色网页网址在线免费| 国产高清免费视频| 国产精品久久精品牛牛影视| 九九热视频在线| av网址在线免费观看| 国产一二三区在线| 99热99re6国产在线播放| 国产一级性片| 久久五月精品| 日本亚洲欧美| 亚洲综合在线不卡| 五月婷婷导航| 国产精品探花在线| 青青草中文字幕| a级在线观看| 99热国产在线| 亚洲男人网站| 91欧美在线视频| 国产精品第八页| 天天操天天曰| 中文字幕在线免费看| 国产精品自拍亚洲| 四虎成人欧美精品在永久在线| 国产成人精品男人的天堂538| √天堂资源中文www| 精品亚洲综合| 在线播放av网站| 一本大道久久精品| 2018中文字幕在线| 中文字幕免费在线视频| 中文字幕色视频| 国产成人精品实拍在线| 国产三线在线| 在线观看国产福利视频| 免费国产阿v视频在线观看| 九色精品视频在线观看| 88av在线| 人xxxx性xxxxx欧美| 麻豆国产在线播放| av中文在线| 国产乱视频在线观看播放| 国产三级视频在线| 国产精品久久久久一区二区国产| 日本三级在线视频| 欧美日韩**字幕一区| 午夜国产视频| 日本三级在线视频| baoyu777.永久免费视频| 免费视频二区| 2018中文字幕在线观看| 欧美精品se| 97最新国自产拍视频在线完整在线看 | 国产porny蝌蚪视频| 国产盗摄精品一区二区酒店| 白浆爆出在线观看| 成人免费一区二区三区牛牛 | 国产美女福利在线| 国产写真视频在线观看| 蜜桃av在线免费观看| 97视频在线| 中文字幕久热在线精品| 黄色毛片在线| 免费看黄视频网站| 国产精品秘入口| 九九99九九精彩| 日本不卡视频一区二区| 国产一起色一起爱| 亚洲成av人影片在线观看| 2020中文字幕在线播放| 中文字幕在线影视资源| 精精国产xxxx视频在线动漫| 国产va在线观看| 国产亚洲精品久久久久久移动网络| 四虎精品视频| 日本天堂影院在线视频| av三级在线观看| 午夜在线不卡| 欧美精品一区二区三区免费| 久久综合精品视频| 91社区在线观看| 国产激情视频一区二区三区| 精品全国在线一区二区| 国产经典av| 91看片在线观看| 国产激情在线观看| 欧美韩日国产| 国产乱妇乱子| 国产高清视频在线播放| 国产区在线看| 精品国产免费观看一区| 性欧美精品xxxx| 老鸭窝av在线| 国产日韩欧美第一页| 999在线视频| 奇米影视狠狠狠| 中文字幕亚洲精品视频| 国产福利电影在线| 在线免费观看你懂的| 日本动漫理论片在线观看网站| 中文字幕在线播放网址| 丁香婷婷在线观看| 国产美女福利在线| 国产盗摄一区二区| 永久免费不卡在线观看黄网站| 国产一级网站视频在线| 亚洲一区免费在线| 国产中文字幕在线| 国产一卡2卡3卡四卡网站| 精品视频一二区| 五月婷婷导航| 日本在线观看| 99re热在线观看| 国产精品一卡二卡三卡| www.av在线视频| 97人人在线| 奇米影视狠狠狠| 在线看黄色av| 国产精品扒开做爽爽爽的视频| 成人精品福利| 免费电影网站在线视频观看福利| 伊人狠狠av| 国产探花在线观看| 精品国产免费观看一区| 国产日韩精品在线看| 国产一卡2卡3卡4卡网站免费| 国产原创在线播放| 精品国语对白精品自拍视| 国产卡二和卡三的视频| 欧美亚洲系列| 免费男女羞羞的视频网站中文字幕| 国产精品xxx电影| 国产秀色在线www免费观看| 免费精品国产自产拍观看| av中文字幕在线看| 国产精品18久久久久网站| 国产一级大片| 国产丝袜在线播放| 亚洲欧美小说国产图片| 99免费视频| 天天插天天狠天天透| 四虎久久影院| 青青草原国产在线| 精品视频三区| 色中文字幕在线| 免费在线看v| 狠狠综合久久久综合| 尤物视频在线免费观看| 国产精品免费91| 在线观看av的网站| 中文资源在线网| 精品av中文字幕在线毛片| av一级在线| 成人午夜无人区一区二区| 国产午夜三区视频在线| 96久久久久久| 免费a级人成a大片在线观看| 国产福利视频在线| 精品女厕厕露p撒尿| 久草国产视频| 在线色视频网| 欧美日韩不卡中文字幕在线|