string Name = "";
string imgFile = "";
if (prmember != null)
{
Name = prmember.Name;
}
string path = "/m-wap/HGProduct/ProductDetails?PID=" + prmember.ID + "";
string url = CreatUrl(path);
ErcodeInfo info = new ErcodeInfo();
info.ID = id;
info.Name = Name;
info.Til = Name+"二维码";
info.URL = url;
byte[] data = GenerRideCode.ShowImg(info);
return File(data, "image/Png");
public class GenerRideCode
{
/// <summary>
/// 转换成流的形式
/// </summary>
/// <param name="matrix"></param>
/// <returns></returns>
public static Bitmap toBitmap(ByteMatrix matrix)
{
int width = matrix.Width;
int height = matrix.Height;
Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
}
}
return bmap;
}
public static string UpLoadImg(ErcodeInfo info, HttpServerUtilityBase Server1)
{
ByteMatrix byteMatrix = new MultiFormatWriter().encode(info.URL, BarcodeFormat.QR_CODE, 600, 700);
Bitmap bitmap = GenerRideCode.toBitmap(byteMatrix);
int width = bitmap.Width, height = bitmap.Height;
Graphics g = Graphics.FromImage(bitmap);
g.DrawImage(bitmap, 0, 0);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.DrawImage(bitmap, new Rectangle(0, 0, width, height), 0, 30, width, height, GraphicsUnit.Pixel);
Font crFont = new Font("微软雅黑", 30, FontStyle.Bold);
SizeF crSize = new SizeF();
string text = info.Name;
crSize = g.MeasureString(text, crFont);
//SolidBrush semiTransBrush = new SolidBrush(Color.Green);
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 0));
//将原点移动 到图片中点
g.TranslateTransform((600 - crSize.Width) / 2, 580);
//以原点为中心 转 -45度
g.RotateTransform(0);
g.DrawString(text, crFont, semiTransBrush, new PointF(0, 0));
g.TranslateTransform(-(600 - crSize.Width) / 2, -580);
crSize = g.MeasureString(info.Til, crFont);
g.TranslateTransform((600 - crSize.Width) / 2, 630);
g.DrawString(info.Til, crFont, semiTransBrush, new PointF(0, 0));//"产品展示二维码"
string imgFile = "/Storage/UserImage/" + info.ID + ".jpg";
string tFullName = Server1.MapPath(imgFile);
bitmap.Save(tFullName, System.Drawing.Imaging.ImageFormat.Jpeg);
return imgFile;
}
public static byte[] ShowImg(ErcodeInfo info)
{
ByteMatrix byteMatrix = new MultiFormatWriter().encode(info.URL, BarcodeFormat.QR_CODE, 400, 459);
Bitmap bitmap = GenerRideCode.toBitmap(byteMatrix);
int width = bitmap.Width, height = bitmap.Height;
Graphics g = Graphics.FromImage(bitmap);
g.DrawImage(bitmap, 0, 0);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.DrawImage(bitmap, new Rectangle(0, 0, width, height), 0, 30, width, height, GraphicsUnit.Pixel);
Font crFont = new Font("微软雅黑", 16, FontStyle.Bold);
SizeF crSize = new SizeF();
string text = info.ID.ToString();
crSize = g.MeasureString(text, crFont);
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 0));
//将原点移动 到图片中点
g.TranslateTransform((400 - crSize.Width) / 2, 380);
//以原点为中心 转 -45度
g.RotateTransform(0);
g.DrawString(text, crFont, semiTransBrush, new PointF(0, 0));
g.TranslateTransform(-(400 - crSize.Width) / 2, -380);
crSize = g.MeasureString(info.Til, crFont);
g.TranslateTransform((400 - crSize.Width) / 2, 410);
g.DrawString(info.Til, crFont, semiTransBrush, new PointF(0, 0));
//在本地生成二维码图片
//string filename = @"E:\卓立信息\备份\generate1.png";
//bitmap.Save(filename, ImageFormat.Png);
//用流的形式把图片显示在前台的img标签中
byte[] data;
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
data = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data, 0, Convert.ToInt32(stream.Length));
}
return data;
}
}
/// <summary>
/// 生成二维码url
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private string CreatUrl(string path)
{
string AbsoluteUri;
string domain;
string allurl = Request.Url.ToString();
var xy = allurl.Split(':');
AbsoluteUri = xy[0];
domain = System.Web.HttpContext.Current.Request.Url.Host;
int? port = Request.Url.Port;
if (port != null && port != 80)
{
domain += ":" + port;
}
string url = AbsoluteUri + "://" + domain + path;
return url;
}