c#-求一个C#生成印章的代码

问题描述

求一个C#生成印章的代码

我在做一个模拟真实印章效果的小程序,需要能看起来类似真实的印章效果。哪位有这方面的代码求赏赐。
要求:1、印章的颜色要跟真实印章效果类似,能模拟真实印章的颜色不均匀。
2、背景要能透明,即要像真实的盖在纸上的印章,能看到底下的文字。

解决方案

很简单,创建一个带透明颜色的位图,画上圆圈、文字和五角星,颜色这个不好说,不同的显示器,不同人的判断都不同,你选一个差不多就可以。然后随机将某些地方设置为透明色,模仿不均匀的效果
最后将这个图层和你的背景文档合成下,用drawimage绘图。

解决方案二:

估计网上生成的电子印章,都不能满足你的要求。
特别是颜色要跟真实印章效果类似!可行方法就是实物拍照,获取印章的底色。然后再完成其它元素增加到底色上的过程。

解决方案三:

页面:
using System;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void uploadFileBtn_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        string contentType = FileUpload1.PostedFile.ContentType;
        if (contentType.StartsWith("image/"))
        {
            string filePath = Server.MapPath(string.Format("~/{0}", FileUpload1.PostedFile.FileName));
            ///保存文件
            FileUpload1.SaveAs(filePath);
            ///加水印
            this.AddWatermark(filePath, this.watermarkTextBox.Text);
            image.ImageUrl = string.Format("~/{0}", FileUpload1.PostedFile.FileName);
         }
    }
}

/**/
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
    System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);

    int towidth = width;
    int toheight = height;

    int x = 0;
    int y = 0;
    int ow = originalImage.Width;
    int oh = originalImage.Height;

    switch (mode)
    {
        case "HW"://指定高宽缩放(可能变形)
            break;
        case "W"://指定宽,高按比例
            toheight = originalImage.Height * width / originalImage.Width;
            break;
        case "H"://指定高,宽按比例
            towidth = originalImage.Width * height / originalImage.Height;
            break;
        case "Cut"://指定高宽裁减(不变形)
            if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
            {
                oh = originalImage.Height;
                ow = originalImage.Height * towidth / toheight;
                y = 0;
                x = (originalImage.Width - ow) / 2;
            }
            else
            {
                ow = originalImage.Width;
                oh = originalImage.Width * height / towidth;
                x = 0;
                y = (originalImage.Height - oh) / 2;
            }
            break;
        default:
            break;
    }

    //新建一个bmp图片
    System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

    //新建一个画板
    System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

    //设置高质量插值法
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

    //设置高质量,低速度呈现平滑程度
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

    //清空画布并以透明背景色填充
    g.Clear(System.Drawing.Color.Transparent);

    //在指定位置并且按指定大小绘制原图片的指定部分
    g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
        new System.Drawing.Rectangle(x, y, ow, oh),
        System.Drawing.GraphicsUnit.Pixel);

    try
    {
        //以jpg格式保存缩略图
        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (System.Exception e)
    {
        throw e;
    }
    finally
    {
        originalImage.Dispose();
        bitmap.Dispose();
        g.Dispose();
    }
}

/// <summary>
/// 添加水印
/// </summary>
/// <param name="filePath"></param>
/// <param name="watermaterText"></param>
private void AddWatermark(string filePath, string watermaterText)
{
    using (TextWatermarkPainter painter = new TextWatermarkPainter(filePath, 80, watermaterText))
    {
        painter.FontColor = System.Drawing.Color.Gray;
        painter.PaintWaterMark();
    }

}

}

解决方案四:

写文字水印

 using System.Drawing;

/// <summary>
    /// 添加文字水印
    /// </summary>

public sealed class TextWatermarkPainter : WatermarkPainter
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="rawImagePath"></param>
        /// <param name="alpha"></param>
        /// <param name="text"></param>
        public TextWatermarkPainter(string rawImagePath, int alpha, string text)
            : base(rawImagePath, alpha)
        {
            WatermarkText = text;
        }

        private Font m_Font;

        /// <summary>
        /// 水印文字的字体
        /// </summary>
        public Font Font
        {
            get
            {
                if (null == m_Font)
                    m_Font = new Font("Arial Black", 30, FontStyle.Bold, GraphicsUnit.Pixel);
                return m_Font;
            }
            set { m_Font = value; }
        }

        private Color m_FontColor;

        /// <summary>
        /// 字体颜色
        /// </summary>
        public Color FontColor
        {
            get
            {
                if (m_FontColor == null)
                    m_FontColor = Color.DarkSeaGreen;
                return m_FontColor;
            }
            set { m_FontColor = value; }
        }

        private string m_WatermarkText;

        /// <summary>
        /// 水印的文字
        /// </summary>
        public string WatermarkText
        {
            get { return m_WatermarkText; }
            set { m_WatermarkText = value; }
        }

        /// <summary>
        /// 实现添加水印的方法
        /// </summary>
        /// <param name="graphics"></param>
        /// <param name="newImage"></param>
        /// <returns></returns>
        protected override bool AddWatermark(Graphics graphics, Bitmap newImage)
        {
            if (string.IsNullOrEmpty(WatermarkText))
                return true;
            using (SolidBrush brush = new SolidBrush(Color.FromArgb(WatermarkAlpha, FontColor.R, FontColor.G, FontColor.B)))
            {
                Font font;
                ///添加文字位置
                PointF f = new PointF();
                float totalWidth = Font.Size * WatermarkText.Length;
                f.X = newImage.Width - totalWidth - 100;
                f.Y = newImage.Height - Font.Height;
                if (f.X < 0)
                {
                    ///自动调整字体的大小
                    float width = newImage.Width / WatermarkText.Length;
                    font = new Font(Font.FontFamily, width, GraphicsUnit.Pixel);
                }
                else
                    font = Font;
                graphics.DrawString(WatermarkText, font, brush, f);
            }
            return true;
        }

        #region IDisposable 成员

        public override void Dispose()
        {
            Font.Dispose();
            base.Dispose();
        }

        #endregion
    }

解决方案五:

图标水印

 using System;
using System.Drawing;
using System.IO;

/// <summary>
/// 图片水印绘制器
/// </summary>
public abstract class WatermarkPainter : IDisposable
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="rawImagePath"></param>
        /// <param name="alpha"></param>
        /// <param name="replaceRawImage"></param>
        protected WatermarkPainter(string rawImagePath, int alpha, bool replaceRawImage)
        {
            ImageToBePainted = rawImagePath;
            WatermarkAlpha = alpha;
            ReplaceRawImage = replaceRawImage;
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="rawImagePath"></param>
        /// <param name="alpha"></param>
        protected WatermarkPainter(string rawImagePath, int alpha)
            : this(rawImagePath, alpha, true)
        { }

        /// <summary>
        /// 为临时存储文件添加的后缀
        /// </summary>
        private string m_TempFileSuffix = ".juice.watermark.temp";

        /// <summary>
        /// 水印的透明度
        /// </summary>
        private int m_WatermarkAlpha;

        /// <summary>
        /// 水印透明度
        /// </summary>
        public int WatermarkAlpha
        {
            get
            {
                if (m_WatermarkAlpha > 255)
                    m_WatermarkAlpha = 255;
                else if (m_WatermarkAlpha < 0)
                    m_WatermarkAlpha = 0;
                return m_WatermarkAlpha;
            }
            set { m_WatermarkAlpha = value; }
        }

        private string m_ImageToBePainted;

        /// <summary>
        /// 添加水印的图片的物理路径
        /// </summary>
        public string ImageToBePainted
        {
            get { return m_ImageToBePainted; }
            set { m_ImageToBePainted = value; }
        }

        private bool m_ReplaceRawImage;

        /// <summary>
        /// 是否用加了水印的图片替换原有的图片
        /// </summary>
        public bool ReplaceRawImage
        {
            get { return m_ReplaceRawImage; }
            set { m_ReplaceRawImage = value; }
        }

        private string m_TempImagePath;

        /// <summary>
        /// 加了水印后的临时储存名称
        /// </summary>
        protected string TempImagePath
        {
            get
            {
                if (string.IsNullOrEmpty(this.m_TempImagePath))
                {
                    System.Text.StringBuilder s = new System.Text.StringBuilder(ImageToBePainted);
                    s.Append(this.m_TempFileSuffix);
                    this.m_TempImagePath = s.ToString();
                }
                return m_TempImagePath;
            }
            set { m_TempImagePath = value; }
        }

        /// <summary>
        /// 原始图像
        /// </summary>
        private Image m_RawImage;

        /// <summary>
        /// 为图片添加水印
        /// </summary>
        public void PaintWaterMark()
        {
            if (string.IsNullOrEmpty(ImageToBePainted))
                return;
            if (!File.Exists(ImageToBePainted))
                throw new FileNotFoundException(string.Format("file {0} not found.", ImageToBePainted));
            bool succeed;
            if (m_RawImage == null)
                m_RawImage = Image.FromFile(ImageToBePainted);
            ///原始的图片
            using (Bitmap newImage = new Bitmap(m_RawImage.Width, m_RawImage.Height))
            {
                ///创建绘制图片的图面
                using (Graphics g = Graphics.FromImage(newImage))
                {
                    g.DrawImage(m_RawImage, 0, 0, m_RawImage.Width, m_RawImage.Height);
                    ///开始绘制水印
                    succeed = AddWatermark(g, newImage);
                }
                if (succeed)
                    ///将图片保存到临时的文件
                    newImage.Save(TempImagePath);
                if (m_RawImage != null)
                    m_RawImage.Dispose();
            }
            if (succeed && ReplaceRawImage)
            {
                //删除原来的文件
                if (File.Exists(ImageToBePainted))
                    File.Delete(ImageToBePainted);
                FileInfo info = new FileInfo(TempImagePath);
                if (info.Exists)
                {
                    info.MoveTo(ImageToBePainted);
                }
            }

        }

        /// <summary>
        /// 添加水印,继承类可以用来添加自己的水印
        /// </summary>
        /// <param name="graphics"></param>
        /// <param name="newImage"></param>
        /// <returns></returns>
        protected abstract bool AddWatermark(Graphics graphics, Bitmap newImage);

        #region IDisposable 成员

        public virtual void Dispose()
        {

        }

        #endregion
    }

时间: 2024-11-02 01:21:26

c#-求一个C#生成印章的代码的相关文章

javascript-JS求一个查看简单相册的代码

问题描述 JS求一个查看简单相册的代码 具体就是跟QQ空间的相册有点相似 下面都是小的照片 点击其中一个 上面出现大的照片 求具体代码 解决方案 再页面上加一个div隐藏域 这个隐藏域就是那个点击出来的大图的样子 在那个小的图片上面加个链接 调用一下js方法 把点击的图片id或者什么唯一标识带到js方法里面 在js方法里面将那个隐藏的div显示 并且把div中的图片路径换成点击的那个图片 改变一下图片大小就好了 解决方案二: 其实就2张图片,小图放底下,大图浮动在小图上面,就有这种渐显效果了 看

求一个c#的简单加法器代码

问题描述 求一个c#的简单加法器代码 谁能给我个C#加法器的代码?用窗体编写的那种.可以实现两个数求和,边输入加数与被加数的时候边自动求和,若输入的不是数字则不显示,并给用户提示.应该不会很麻烦吧,大神现编一个也行~~ 解决方案 简单的一个求所有组合数的代码用C#创建XML[简单代码] 解决方案二: 是啊,很简单的 解决方案三: private void textBox1_KeyPress(object sender KeyPressEventArgs e) { //如果输入的不是数字键,也不是

求一个添加文章的程序代码,适合新手学习用的

问题描述 求一个添加文章的程序代码,适合新手学习用的谢谢了 解决方案 解决方案二:http://www.51aspx.com/你去下套源码吧,添加文章的有的是!解决方案三:用DetailView控件一下就搞了.解决方案四:很多源码呀解决方案五:好像一个moumou论坛,很简单解决方案六:引用1楼maco_wang的回复: http://www.51aspx.com/你去下套源码吧,添加文章的有的是! 这里真的好多哦

求一个随机生成6倍数7位数8位数9位数等的函数

问题描述 可用数字为0,1,2,3,4,5,6,7,8,9一开始从6位数开始,每生成的一组数字都不能重复,每组数字的第1位必须以非0开始,6位生成完了,从第7位开始生成,7位生成完了从第8位开始以此类推,每生成一组为数字都会保存到数据库中,求解谢谢 解决方案 解决方案二: 你这个还需要随机吗?从100000开始循环+1不就可以了?解决方案三: 先做个6的倍数的6789位数集合然后随机取取一个清一个解决方案四: 不能循环累加形成整体形式就像申请的QQ号那样,这个函数是放在批量导入用户时为用户生成用

向高手求一个导航型的css代码。如图。

问题描述 图片是这个:如果看不到,请点击:http://hi.csdn.net/space-10131675-do-album-picid-944339-goto-down.html 解决方案 解决方案二:这个用jquery来实现比较容易,点击显示当前层隐藏其它的层解决方案三:用javascript中的jquery来写显示或者隐藏的代码,然后用css来写页面的基本样式,很容易就能搞定的!

本人求一个Struts+Hibernate分页的代码

问题描述 要求带注解的代码...谢谢 解决方案 http://jeffreyhsu.iteye.com/blog/28432http://blog.csdn.net/raozhiyong11/archive/2010/01/16/5200459.aspx这2个比较好解决方案二:annotation 版的? 好像怎么好着!下面这个是 通用的 你看看吧!http://www.iteye.com/topic/282727

求一个附件上传的代码

问题描述 1.指定文件大小1M右右2.要能指定文件类型,*.rar*.doc*.jpg*.bmp3.上传完后并能显示出来多谢路过的XDJM!! 解决方案 解决方案二:这个不难,privateboolCheckPic(){boolisSafe=false;HttpPostedFilepic=picfile.PostedFile;//扩展名检查stringpicext=System.IO.Path.GetExtension(picfile.PostedFile.FileName).ToLower()

求一个产品滚动效果代码

问题描述 求一个获取图片滚动的代码,想弄一个新品滚动的效果,但都解决方案二:#,就像http://www.360buy.com/中的新品上架那种翻屏改动的效果. 解决方案 解决方案三:上海互通网络5.1盛大促销!所有用户(包括代理)!购买1G空间联系客服免费赠送1个CN国际域名!最终解释权归上海互通网络科技有限公司所有!详情请访问:QQ:287895593解决方案四:<script>varmarqueeContent=newArray();//滚动新闻marqueeContent[0]='&l

php-求一个选择购买的完整代码

问题描述 求一个选择购买的完整代码 类似主机屋服务器购买那个代码http://www.zhujiwu.com/server/可以选择产品种类并计价最后结算,数据储存到后台,最好是储存到mdb,不需要登录的那一堆,只需要计价结算以及储存数据,asp.html,php均可 解决方案 本人已经自行解决,无需拿饭大家,asp拆分表单即可 解决方案二: 如何为你的代码选择一个开源协议注射的一个完整代码ext做的一个完整的登录代码