C#实现封面图片生成器的示例代码

目录
  • 实现功能
  • 开发环境
  • 实现代码
  • 实现效果

这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒。懒得去寻找图片,同时又怕万一惹来版权争议。。。

跟我所有的文章的封面图一样,一个纯色背景加上文字自动生成一个指定大小的图片。

代码实现也比较简单,如果有兴趣的话,可以自己扩展,比如自定义背景图,自定义水印等。

实现功能

利用C#做一个简单的封面图片生成器

开发环境

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码

   private void Img_Load(object sender, EventArgs e)
        {
            init();
        }
        private void btnBg_Click(object sender, EventArgs e)
        {
            ColorDialog cd = new ColorDialog();
            if (cd.ShowDialog() == DialogResult.OK)
            {
                panelBgColor.BackColor = cd.Color;
            }
        }

        private void btnFontColor1_Click(object sender, EventArgs e)
        {
            ColorDialog cd = new ColorDialog();
            if (cd.ShowDialog() == DialogResult.OK)
            {
                panelFontColor1.BackColor = cd.Color;
            }
        }

        private void btnFontColor2_Click(object sender, EventArgs e)
        {
            ColorDialog cd = new ColorDialog();
            if (cd.ShowDialog() == DialogResult.OK)
            {
                panelFontColor2.BackColor = cd.Color;
            }
        }

        private void btnFont_Click(object sender, EventArgs e)
        {
            FontDialog fd = new FontDialog();
            fd.Font = txtFont.Font;
            if (fd.ShowDialog() == DialogResult.OK)
            {
                txtFont.Font = fd.Font;
            }
        }

        private void btnPre_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtWord.Text))
            {
                MessageBox.Show("请先设置文字", "提示");
                return;
            }
            MemoryStream stream = new MemoryStream(CreateIamge(txtWord.Text));
            pictureBox1.Image = Image.FromStream(stream, true);
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image == null)
            {
                MessageBox.Show("请先预览", "提示");
                return;
            }

            SaveFileDialog sfd = new SaveFileDialog();
            sfd.SupportMultiDottedExtensions = true;
            sfd.Filter = "PNG格式|*.png|JPG格式|*.jpg";
            sfd.AddExtension = true;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
                pictureBox1.Image.Save(sfd.FileName, GetEncoderInfo("image/png"), myEncoderParameters);
            }
        }

        private void init()
        {
            Font font = new Font("华文行楷", 36, FontStyle.Bold);
            txtFont.Font = font;
            panelFontColor1.BackColor = ColorTranslator.FromHtml("#ff0080ff");
            panelFontColor2.BackColor = ColorTranslator.FromHtml("#ffff80c0");
        }

        public byte[] CreateIamge(string str)
        {
            int w = Convert.ToInt32(txtWidth.Text);
            int h = Convert.ToInt32(txtHeight.Text);

            //渐变画笔
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, w, h), panelFontColor1.BackColor, panelFontColor2.BackColor, 25f, true);
            Bitmap image = new Bitmap(w, h);

            Graphics g = Graphics.FromImage(image);

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

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

            //消除锯齿
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            //填充背景色
            g.FillRectangle(new SolidBrush(panelBgColor.BackColor), new Rectangle(0, 0, w, h));
            //设置文本呈现方式
            g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
            //获取文字大小
            SizeF sf = g.MeasureString(str, txtFont.Font);

            g.DrawString(str, txtFont.Font, brush, (w - sf.Width) / 2, (h - sf.Height) / 2);

            MemoryStream stream = new MemoryStream();
            //高质量保存
            EncoderParameters myEncoderParameters = new EncoderParameters(1);
            myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
            image.Save(stream, GetEncoderInfo("image/png"), myEncoderParameters);

            byte[] buffer = stream.ToArray();
            g.Dispose();
            image.Dispose();
            return buffer;
        }

        private static ImageCodecInfo GetEncoderInfo(String mimeType)
        {
            int j;
            ImageCodecInfo[] encoders;
            encoders = ImageCodecInfo.GetImageEncoders();
            for (j = 0; j < encoders.Length; ++j)
            {
                if (encoders[j].MimeType == mimeType)
                    return encoders[j];
            }
            return null;
        }

实现效果

到此这篇关于C#实现封面图片生成器的示例代码的文章就介绍到这了,更多相关C#封面图片生成器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c#生成自定义图片方法代码实例

    本篇文章给大家带来的内容是关于c# 如何生成自定义图片?c# 生成自定义图片方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. using System.Drawing;using System.IO;using System.Drawing.Imaging;using System;namespace treads { /// <summary> /// 生成略缩图 /// </summary> public class Class2 { private Ima

  • c#生成图片缩略图的类(2种实现思路)

    第一种 复制代码 代码如下: /**//// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <param name="width&quo

  • c# 生成文字图片和合并图片的示例

    生成文字图片: /// <summary> /// 生成文字图片 /// </summary> /// <param name="text"></param> /// <param name="isBold"></param> /// <param name="fontSize"></param> public Image CreateImage(st

  • C#实现在底图上动态生成文字和图片

    本文主要记录在图片上动态的生成需要添加的文字和把指定的图片加到底图上,直接上代码 /// <summary> /// 在底图上画指定路径的图片 /// </summary> /// <param name="g">画板实例</param> /// <param name="path">图片路径</param> /// <param name="totalWidth"&g

  • C#远程发送和接收数据流生成图片的方法

    本文实例讲述了C#远程发送和接收数据流生成图片的方法.分享给大家供大家参考.具体如下: 将图片转成数据流方式发送到远程服务,在通过服务器后台程序来接收数据流,再保存成图片存放在需要的地方. 这种方式就类似上传图片功能一样,希望能给一些大家另一种上传图片功能的方法. 发送数据流方法 /// <summary> /// PostBinaryData /// </summary> /// <param name="url">要发送的 url 网址</

  • c# .net 生成图片验证码的代码

    说明:  .net 万岁...  .net framework 的类库真是太强了, 用 GDI+ 可以干N多N多事情.   广告时间:  shawl.qiu C# CMS 系统 预计40天后开始编码, 现在逐步设计中, 免得到时求职说什么什么作品...唉.  PS: 今天求职真是惨不忍睹, 谁要招网页相关的请联系 13435580019, 邱先生.   什么地方俺都去, 工资只要能过活就行,  但是食宿问题得解决.  shawl.qiu  2007-02-01  http://blog.csdn

  • C#实现封面图片生成器的示例代码

    目录 实现功能 开发环境 实现代码 实现效果 这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒.懒得去寻找图片,同时又怕万一惹来版权争议... 跟我所有的文章的封面图一样,一个纯色背景加上文字自动生成一个指定大小的图片. 代码实现也比较简单,如果有兴趣的话,可以自己扩展,比如自定义背景图,自定义水印等. 实现功能 利用C#做一个简单的封面图片生成器 开发环境 开发工具: Visual Studio 2013 .NET Framework版本:4.5 实现代码 pri

  • C# Guid长度雪花简单生成器的示例代码

    标准的long雪花长度为64bit,还要浪费1bit,然后41位时间,10位workid,12位序列 guid长度128位,64位完整的时间tick,32位workid,32位序列,可谓随便用满非常豪华 也就是系统里可以根据需要有的地方存随机guid,有的地方存雪花guid,随便换 随后还有提取时间的方法,由于是64位完整时间,直接拿出来转时间就好了 这个类参考别人的代码,如果需要设计更完善的guid雪花,可以在github上或者nuget上找newid这个项目,老外写好的更完善的做法 publ

  • react-pdf 打造在线简历生成器的示例代码

    目录 前言 React-PDF简介 程序实现 初始化项目 实现逻辑 遇到问题 重构 部署 参考 前言 PDF 格式是30年前开发的文件格式,并且是使用最广泛的文件格式之一,我们最喜欢使用它作为简历.合同.发票.电子书等文件的格式,最主要的原因是文档格式可以兼容多种设备和应用程序,而且内容 100%保持相同的格式. React-PDF 简介 React PDF 是一个使用 React 创建 PDF 文件的工具,支持在浏览器.移动设备和服务器上创建PDF文件. 可以用它们轻松地将内容呈现到文档中,我

  • Python函数的迭代器与生成器的示例代码

    函数的迭代器 函数的强大功能叫做迭代器,Python里面最具威力的功能之一.迭代器我们听起来会感觉非常陌生,在list.tuple都有用到它,我们是使用for和in取列表中的每一个元素,对每个元素依次处理,这种方法就叫做迭代,实现这种方法的函数叫做迭代器.迭代器中有两个基本的函数,这个函数叫做方法,这个是面向对象编程称呼的一个方法,这两个方法叫做iter()和next(). 1.什么是迭代?迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 2.要想了解迭代器到底是什么?必须先了解一个概

  • Python生成器的使用方法和示例代码

    本文是<Effect Python 编写高质量Python代码的59个有效方法>的学习笔记.主要记录生成器的使用方法和示例代码. 返回队列的函数 如果函数要产生一系列结果,那么最简单的做法就是把这些结构都放在一份列表里,然后将其返回给调用者. def index_words(text): """用append方法将这些此的首字母索引添加到result列表中,并在函数结束时将其返回给调用者.""" result = [] if text

  • SpringBoot集成JPA的示例代码

    本文介绍了SpringBoot集成JPA的示例代码,分享给大家,具体如下: 1.创建新的maven项目 2. 添加必须的依赖 <!--springboot的必须依赖--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE

  • Spring Boot使用过滤器和拦截器分别实现REST接口简易安全认证示例代码详解

    本文通过一个简易安全认证示例的开发实践,理解过滤器和拦截器的工作原理. 很多文章都将过滤器(Filter).拦截器(Interceptor)和监听器(Listener)这三者和Spring关联起来讲解,并认为过滤器(Filter).拦截器(Interceptor)和监听器(Listener)是Spring提供的应用广泛的组件功能. 但是严格来说,过滤器和监听器属于Servlet范畴的API,和Spring没什么关系. 因为过滤器继承自javax.servlet.Filter接口,监听器继承自ja

  • Spring Security OAuth2 实现登录互踢的示例代码

    本文主要介绍了Spring Security OAuth2 实现登录互踢的示例代码,分享给大家,具体如下: 背景说明 一个账号只能一处登录,类似的业务需求在现有后管类系统是非常常见的. 但在原有的 spring security oauth2 令牌方法流程(所谓的登录)无法满足类似的需求. 我们先来看 TokenEndpoint 的方法流程 客户端 带参访问 /oauth/token 接口,最后去调用 TokenGranter TokenGranter 根据不同的授权类型,获取用户认证信息 并去

  • Python3读取和写入excel表格数据的示例代码

    python操作excel主要用到 xlrd 和 xlwt 这两个库,xlrd读取excel表格数据, 支持 xlsx和xls格式的excel表格 :xlwt写入excel表格数据: 一.python读取excel表格数据 1.读取excel表格数据常用操作 import xlrd # 打开excel表格 data_excel=xlrd.open_workbook('data/dataset.xlsx') # 获取所有sheet名称 names=data_excel.sheet_names()

  • Java spring boot 实现支付宝支付功能的示例代码

    一.准备工作: 1.登陆支付宝开发者中心,申请一个开发者账号. 地址:https://openhome.alipay.com/ 2.进入研发服务: 3.点击链接进入工具下载页面: 4.点击下载对应版本的RSA公钥生成器: 5.生成公钥密钥(记录你的应用私钥): 6.在支付宝配置公钥(点击保存): 二.搭建demo 1.引入jia包: <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alip

随机推荐