1、由于网络安全性,所以不能再网络图片上写字,首先进行图片下载,然后在本地进行写字

具体调用代码如下:

Dictionary<string, string> dic_User = new Dictionary<string, string>();dic_User.Add("input", "" + ds.Tables[0].Rows[0]["surname"] + ds.Tables[0].Rows[0]["userName"] + "");//当前接收发证人的姓名dic_User.Add("x", "600");dic_User.Add("y", "700");dic_User.Add("middle", "true");//是否居中显示  true 居中 false 不居中
Dictionary<string, string> dic_CourseName = new Dictionary<string, string>();dic_CourseName.Add("input", "" + ds.Tables[0].Rows[0]["courseName"] + "");//课程名称dic_CourseName.Add("x", "600");dic_CourseName.Add("y", "900");dic_CourseName.Add("middle", "true");//是否居中显示  true 居中 false 不居中
Dictionary<string, string> dic_Time = new Dictionary<string, string>();dic_Time.Add("input", "" + Convert.ToDateTime(ds.Tables[0].Rows[0]["StartTime"]).ToString("yyyy.MM.dd") + "-" + Convert.ToDateTime(ds.Tables[0].Rows[0]["EndTime"]).ToString("yyyy.MM.dd") + "");//证书有效期dic_Time.Add("x", "600");dic_Time.Add("y", "1200");dic_Time.Add("middle", "true");//是否居中显示  true 居中 false 不居中
Dictionary<string, string> dic_teacher = new Dictionary<string, string>();  //学员讲师dic_teacher.Add("input", "" + ds.Tables[0].Rows[0]["teacher"] + "");dic_teacher.Add("x", "400");dic_teacher.Add("y", "1500");dic_teacher.Add("middle", "flase");//是否居中显示  true 居中 false 不居中
List<Dictionary<string, string>> listdict = new List<Dictionary<string, string>>();listdict.Add(dic_User);listdict.Add(dic_CourseName);listdict.Add(dic_Time);listdict.Add(dic_teacher);BuildImage.CreateImgage(listdict, Color.Black, ConfigurationManager.AppSettings["examfile"].ToString() + ds.Tables[0].Rows[0]["Url"], tid);ImagePrint.ImageUrl = "tempPic/" + tid + ".jpg";

具体实现代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Drawing.Drawing2D;
using System.Net;namespace ELearning.ELearning.Common
{/// <summary>/// 图片提供程序/// create by gaoxing /// 2013-06-09/// </summary>public static class ImageProvider{private static BuildImage buildImage = null;/// <summary>/// 生成图片/// create by gaoxing /// 2013-06-09/// </summary>public static BuildImage Provider{get{if (buildImage == null){buildImage = new BuildImage();}return buildImage;}}}public class BuildImage{private static Matrix m = new Matrix();// 定义字体private static Font[] fonts = {new Font(new FontFamily("Times New Roman"), 18, FontStyle.Bold),new Font(new FontFamily("Georgia"), 18 , FontStyle.Bold),new Font(new FontFamily("Helvetica"), 18, FontStyle.Bold),new Font(new FontFamily("Arial"), 18 , FontStyle.Bold)};/// <summary>/// 生成图片/// create by gaoxing 2013-06-09/// </summary>/// <param name="str">传入字符串</param>/// <param name="bgImg">当前图片对象</param>/// <param name="x">X坐标</param>/// <param name="y">Y坐标</param>/// <param name="color">当前字体颜色</param>/// <param name="middle">是否居中显示  true 居中显示  false 不居中显示</param>/// <returns></returns>private ImageInfo GenerateImage(string str, System.Drawing.Image bgImg, float x, float y, Color color, object middle){ImageInfo imageInfo = new ImageInfo();imageInfo.ImageFormat = ImageFormat.Jpeg;imageInfo.ContentType = "image/pjpeg";Bitmap bitmap = new Bitmap(bgImg, bgImg.Width, bgImg.Height);Graphics g = Graphics.FromImage(bitmap);//是否居中显示if (middle != null){if (middle.ToString() == "true"){//设置X坐标x = SetX(str, x, bitmap, g);}}// 定义前景色 字体颜色SolidBrush drawBrush = new SolidBrush(color);// 写字g.DrawString(str, fonts[3], drawBrush, new PointF(x, y));GetStringLength(str, g);g.ResetTransform();drawBrush.Dispose();g.Dispose();g.Dispose();imageInfo.Image = bitmap;return imageInfo;}/// <summary>/// 设置X坐标(居中显示)/// create by gaoxing /// </summary>/// <param name="str">当前要显示的字符串</param>/// <param name="x">X坐标</param>/// <param name="bitmap">当前的图片对象</param>/// <param name="g">当前的图形对象</param>/// <returns>更新后的X</returns>private static float SetX(string str, float x, Bitmap bitmap, Graphics g){/计算字符串的长度/Graphics tmpG = g;SizeF size = tmpG.MeasureString(str, fonts[3]);float length = size.Width;////计算当前字符串的长度//计算当前字符串的起始像素float piclength = bitmap.Width;x = (piclength / 2) - (length / 2)-25;return x;}/// <summary>/// 获取当前字符串的像素长度/// create by gaoxing /// </summary>/// <param name="str">输入字符串</param>/// <param name="g"></param>private static float GetStringLength(string str, Graphics g){/计算字符串的长度/Graphics tmpG = g;SizeF size = tmpG.MeasureString(str, fonts[3]);float StringWidth = size.Width;return StringWidth;//
        }/// <summary>/// 下载文件/// create by 高兴/// 2013-06-09/// </summary>/// <param name="uriString">网络路径地址</param>/// <param name="id">当前Id</param>/// <returns></returns>private static string DownLoadFile(string uriString, string id){Uri address = new Uri(uriString);string fileName = HttpContext.Current.Server.MapPath("TempPic") + @"\" + id + "Model.jpg";using (WebClient wc = new WebClient()){try{wc.DownloadFile(address, fileName);}catch { }return fileName;}}/// <summary>/// 生成图片,主方法调用/// 传入数据集合/// 每个字典为一组输入数据/// key=input:要打印的字符/// key=x X坐标/// key=y X坐标/// Create by gaoxing/// 2013-06-09/// </summary>/// <param name="listdict">集合数据</param>/// <param name="color">当前字体颜色</param>/// <param name="ImgUrl">图片网络路径</param>/// <param name="imgId">图片Id</param>/// <returns></returns>public static void CreateImgage(List<Dictionary<string, string>> listdict, Color color, string ImgUrl, string imgId){////更改Http头//HttpContext.Current.Response.ClearContent();//HttpContext.Current.Response.ContentType = "image/pjpeg";//HttpContext.Current.Response.BinaryWrite(BuildImage.GetImage(listdict, color, BuildImage.DownLoadFile(ImgUrl, imgId)).ToArray());//HttpContext.Current.Response.End();string fileName = HttpContext.Current.Server.MapPath("TempPic") + "/" + imgId + ".jpg";using (MemoryStream ms = new MemoryStream(BuildImage.GetImage(listdict, color, BuildImage.DownLoadFile(ImgUrl, imgId)).ToArray())){Image image = new Bitmap(ms, true);if (File.Exists(fileName)){File.Delete(fileName);}image.Save(fileName);}}/// <summary>/// 传入数据集合/// 每个字典为一组输入数据/// key=input:要打印的字符/// key=x X坐标/// key=y X坐标/// Create by gaoxing/// 2013-06-09/// </summary>/// <param name="listdict">集合数据</param>/// <param name="color">当前字体颜色</param>/// <param name="imgPath">图片路径</param>/// <returns></returns>private static MemoryStream GetImage(List<Dictionary<string, string>> listdict, Color color, string imgPath){BuildImage buildImage = ImageProvider.Provider;ImageInfo imageInfo = new ImageInfo();using (MemoryStream ms = new MemoryStream()){int i = 0;foreach (Dictionary<string, string> dic in listdict){if (i < 1){imageInfo = buildImage.GenerateImage(dic["input"].ToString(), System.Drawing.Image.FromFile(imgPath), float.Parse(dic["x"].ToString()), float.Parse(dic["y"].ToString()), color, dic["middle"].ToString());}else{imageInfo = buildImage.GenerateImage(dic["input"].ToString(), imageInfo.Image, float.Parse(dic["x"].ToString()), float.Parse(dic["y"].ToString()), color, dic["middle"].ToString());}i++;}long with = System.Drawing.Image.FromFile(imgPath).Width;imageInfo.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);return ms;}}}/// <summary>/// 图片信息/// create by gaoxing /// 2013-06-09/// </summary>public class ImageInfo{private Bitmap image;private string contentType = "image/pjpeg";private ImageFormat imageFormat = ImageFormat.Jpeg;/// <summary>/// 生成的图片/// </summary>public Bitmap Image{get { return image; }set { image = value; }}/// <summary>/// 图片类型,如 image/pjpeg/// </summary>public string ContentType{get { return contentType; }set { contentType = value; }}/// <summary>/// 图片格式/// </summary>public ImageFormat ImageFormat{get { return imageFormat; }set { imageFormat = value; }}}
}

转载于:https://www.cnblogs.com/happygx/p/3265669.html

动态在网络图片上写字相关推荐

  1. java 图片上写字_java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; i ...

  2. java 两张图片合并_java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; i ...

  3. 通过Zookeeper动态感知服务器上下线[案例]

    https://blog.csdn.net/USTC_Zn/article/details/54974982 主体思路: 服务器端:服务器上线.在zookeeper创建 临时的序列化结点 客户端:已启 ...

  4. php 多文件上传控件,php 动态多文件上传

    php 动态多文件上传 更新时间:2009年01月18日 06:01:56   作者: php 动态多文件上传实例代码,前台是javascript后台用的是php 文件上传代码 view plainc ...

  5. android动态更改布局宽高,动态更改Android上的线性布局宽度或高度

    我试图动态更改线性布局或任何其他窗口小部件宽度或高度,但引发异常.动态更改Android上的线性布局宽度或高度 我的布局: android:id="@+id/abc" androi ...

  6. Java使用BTrace动态替换线上class文件

    文章目录 安装BTrace 例子 常用注解 参数注解 BTrace方法 限制条件 安装BTrace 概述:BTrace的功能主要是动态替换线上正在运行的class文件,一般用来增加打印所需要的日志. ...

  7. PHP动态多文件上传的具体代码

    PHP动态多文件上传分为两步,第一步为文件上传的代码,第二步则是文件提交的代码.希望我们通过这次的学习能加深大家所掌握的知识. AD: 大家在通过对PHP语言的学习,应该大致都可以掌握文件上传的方法. ...

  8. 怎么用html把字写到图片上,用HTML代码在图片上写字

    一.以图片作为背景.在图片上写字,主要是在 里用到了(Spacer)空白. type="horizontal" align=#> 水平空白 align=center(居中), ...

  9. 在自行下载的背景图片上写字

    在背景图片上写字 1 下载并修改图片 2 代码 3 其它例子 3.1 不用空格分行 3.2 竖行 主要是参考了 写对联的代码,发散思维,联想到换成自己随便从网页上下载一张图片作为背景,在上面写字是不是 ...

  10. c语言在bmp图片上写字的函数,在bmp上写字

    1.如何在bmp上写字,画画等 2.C++文件读写 3.如何取得桌面.开始菜单等特殊位置路径 4.C++多态的分类 重载多态,强制多态,包含多态,参数多态.普通函数和类的成员函数的重载属于重载多态,还 ...

最新文章

  1. R语言基于日期范围筛选数据实战(Subset by a Date Range):日期范围之内的数据、日期范围之外的数据、日期之后的数据、日期之前的数据
  2. 五年磨砺:微软Vista开发过程全记录
  3. html 进入效果,用css3实现简单的进入效果
  4. 【数据结构与算法】大根堆和优先队列的Java实现
  5. 70+优秀的前端工具(转)
  6. Java 算法刷题指南
  7. SpringBoot蚂蚁课堂-学习笔记
  8. JS API: Fullscreen 全屏 API
  9. 【操作系统】TCP流式传输、UDP数据报传输
  10. 学习 Elasticsearch 的相关使用
  11. STM32F407 ADC+DMA+定时器 定时采样模拟量
  12. 阿里云天池携手产学研心血管专家,共话心血管AI发展
  13. 微波战术通信系统空域抗干扰方法综述
  14. 失控--阅读笔记群蜂思维
  15. java全栈系列之JavaSE--JDK的安装以及环境搭建001
  16. java学生考勤系统实验报告,程序设计实验报告学生考勤系统).doc
  17. 西瓜书机器学习思维导图
  18. Python中的If和For函数
  19. 对随机过程的简单理解
  20. java 字节流读取图片,字符流读取,二进制读取

热门文章

  1. 30 校准_机会难得校准实验室认可培训别再错过
  2. python mysql编码_Python和MySql:Unicode和编码
  3. Ubuntu16.04安装python3.6
  4. MySQL常用命令介绍
  5. 后台数据量太大传输慢_哪些因素会导致慢查询?
  6. java 父类获取子类名称_Java入门第十六课:如何用继承的方法定义类
  7. CS231n李飞飞计算机视觉 神经网络训练细节part2上
  8. LDA-math-认识Beta/Dirichlet分布
  9. 史上最简单的上传文件到linux系统方法
  10. 计算机网络超详细笔记(二):物理层