/// <summary>
/// 获取商品二维码图片
/// </summary>
/// <param name="productid"></param>
/// <returns></returns>
public static DResult GetProductQr(long productid, long memberid)
{
DResult dResult = new DResult() { Success = false };
Graphics g = null;
Image img = null;
try
{
var modelProduct = new ProductInfoBLL().GetModel(productid);
if (modelProduct == null || modelProduct.Id <= 0)
{
dResult.Message = "参数错误";
return dResult;
}
string agentCode = System.Configuration.ConfigurationManager.AppSettings["DefaultAgentCode"] + "";
string urlstr = string.Empty;
var member = new MemberBLL().GetModel(memberid);
if (member == null || member.MemberId <= 0)
{
dResult.Message = "请登录后分享此图片";
dResult.Code = -1;
return dResult;
}
if (memberid > 0)
{
ModelAgent modelAgent = new AgentBLL().GetModelByMemberId(memberid);
if (modelAgent != null && modelAgent.AgentId > 0)
{
agentCode = modelAgent.Code;
}
}
if (modelProduct.ProductType == EnumProductType.Solitaire.GetHashCode() || modelProduct.ProductType == EnumProductType.TwoPersonChip.GetHashCode())
{
urlstr = ConfigurationBLL.GetConfigValueByCache("SysWebH5") + "WeiXin/scanning?id=" + agentCode + "&retUrls=" + System.Web.HttpUtility.UrlEncode(ConfigurationBLL.GetConfigValueByCache("SysWebH5") + "index.html#/FreeDetail?Good_id=" + productid);
}
else
{
urlstr = ConfigurationBLL.GetConfigValueByCache("SysWebH5") + "WeiXin/scanning?id=" + agentCode + "&retUrls=" + System.Web.HttpUtility.UrlEncode(ConfigurationBLL.GetConfigValueByCache("SysWebH5") + "index.html#/GeneralItemDescription?Good_id=" + productid);
}
decimal SalePrice = modelProduct.SalePrice.Value;//商品最低价
var list = new ProductSKUBLL().GetListArray("ProductId=" + productid + " and SalePrice>0");
if (list != null && list.Count > 0)
{
var skuSalePrice = list.Min(p => p.SalePrice).Value;
if (skuSalePrice > 0 && skuSalePrice < SalePrice)
{
SalePrice = skuSalePrice;
}
}
string logo = modelProduct.ProductImg;
if (!logo.Contains("http"))
{
logo = (System.Configuration.ConfigurationManager.AppSettings["IMAGE_URL"] + "").TrimEnd('/') + "/" + logo;
}
string dir = HttpContext.Current.Server.MapPath("~/");
Log.Info("dir=" + dir);
var attachment = new AttachmentUtility();
byte[] bt = QRCodeHelper.QRCode(urlstr, logo, 430, false);
string fileName = "ProductQr/" + productid + "/" + memberid + "/" + DateTime.Now.Ticks + ".png";
string productQr = attachment.GetAttachmentFullUrl("Upload/" + attachment.SaveAttachPath(bt, "ProductQr", (fileName + "qr.png").Replace("ProductQr/", "")));
// string bg = dir + "images\\Share\\productqrbg.jpg";
// img = new Bitmap(new Bitmap(bg), 705, 1233);
img = new Bitmap(705, 1233, PixelFormat.Format32bppRgb);
g = Graphics.FromImage(img);
g.Clear(ColorTranslator.FromHtml("#ffffff"));
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//加上抗锯齿效果
g.DrawLine(new Pen(ColorTranslator.FromHtml("#D7D7D7")), new Point(30, 900), new Point(670, 900));
Point[] destPoints1 = {
new Point(0, 0),//图片左上点
new Point(705, 0),//图片右上点
new Point(0, 705),//图片左下点
};
Bitmap btm = null;
try
{
Uri myUri = new Uri(logo);
WebRequest webRequest = WebRequest.Create(myUri);
webRequest.Timeout = 30000;
WebResponse webResponse = webRequest.GetResponse();
btm = new Bitmap(webResponse.GetResponseStream());
g.DrawImage(btm, destPoints1);//按指定的顶点画图
}
catch (Exception ex)
{
SysLog.SaveException(ex, "生成二维码logo异常:" + logo);
}
finally
{
if (null != btm)
btm.Dispose();
}
string UserIcon = member.UserIcon;
if (string.IsNullOrEmpty(UserIcon))
{
UserIcon = dir + "images\\Share\\logo.png";
}
Bitmap btm1 = null;//头像
try
{
Uri myUri = new Uri(UserIcon);
WebRequest webRequest = WebRequest.Create(myUri);
webRequest.Timeout = 30000;
WebResponse webResponse = webRequest.GetResponse();
btm1 = new Bitmap(webResponse.GetResponseStream());
g.DrawImage(CirclePhoto(btm1, 90), new Point(25, 960));//按指定的顶点画图
string[] hp = ConfigurationBLL.GetConfigValueByCache("GetProductQrHaoPing").Split('|');
int index = new Random().Next(0, hp.Length); //生成随机下标
g.DrawString(member.NickName, new Font("微软雅黑", 20f, FontStyle.Regular, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#424242")), new RectangleF(120, 960, 400, 50));
g.DrawString("五星好评", new Font("微软雅黑", 18f, FontStyle.Regular, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#999999")), new RectangleF(120, 1010, 400, 50));
g.DrawString(hp[index], new Font("微软雅黑", 20f, FontStyle.Regular, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#424242")), new RectangleF(120, 1055, 400, 50));
}
catch (Exception ex)
{
SysLog.SaveException(ex, "生成二维码logo异常:" + logo);
}
finally
{
if (null != btm1)
btm1.Dispose();
}
try
{
string xingxiang = "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";
byte[] imageBytes = Convert.FromBase64String(xingxiang);
//读入MemoryStream对象
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length);
//转成图片
Image image = Image.FromStream(memoryStream);
g.DrawImage(image, new Point(225, 1012));//按指定的顶点画图
}
catch (Exception ex)
{
g.DrawString("★★★★★", new Font("微软雅黑", 24f, FontStyle.Bold, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#FFB000")), new RectangleF(225, 1005, 400, 50));
}
MemoryStream ms = new MemoryStream(bt);
Image qr = new Bitmap(System.Drawing.Image.FromStream(ms), 240, 240);
g.DrawImage(qr, new Point(440, 910));//按指定的顶点画图
g.DrawString(modelProduct.ProductTitle, new Font("微软雅黑", 22f, FontStyle.Regular, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#424242")), new RectangleF(30, 720, 670, 90));
g.DrawString("市场价", new Font("微软雅黑", 22f, FontStyle.Regular, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#999999")), new RectangleF(235, 820, 400, 50));
g.DrawString("¥" + modelProduct.MarketPrice.Value.ToString("N2") + " ", new Font("微软雅黑", 22f, FontStyle.Strikeout, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#999999")), new RectangleF(330, 820, 400, 50));
g.DrawString("¥" + SalePrice.ToString("N2"), new Font("微软雅黑", 22f, FontStyle.Bold, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#E47E3A")), new RectangleF(500, 820, 400, 50));
g.DrawString("长按扫码查看", new Font("微软雅黑", 20f, FontStyle.Regular, GraphicsUnit.Point), new SolidBrush(ColorTranslator.FromHtml("#666666")), new RectangleF(470, 1150, 400, 50));
MemoryStream MStreamBit = new MemoryStream();
img.Save(MStreamBit, ImageFormat.Jpeg);
byte[] _byte = MStreamBit.GetBuffer();
string productAd = attachment.GetAttachmentFullUrl("Upload/" + attachment.SaveAttachPath(_byte, "ProductQr", fileName.Replace("ProductQr/", "")));
return new DResult()
{
Success = true,
Message = "成功",
Data = new
{
productAd = productAd,
productQr = productQr
}
};
}
catch (Exception ex)
{
Log.Error(ex, "生成商品二维码失败", string.Format("生成二维码失败user={0},异常信息:{1}", memberid, ex.Message + ex.StackTrace));
}
finally
{
if (g != null)
{
g.Dispose();
}
if (img != null)
{
img.Dispose();
}
}
return new DResult() { Success = false, Message = "生成商品二维码失败" };
}
商品二维码图片生成方法
该博客主要介绍了获取商品二维码图片的方法。通过传入商品ID和会员ID,进行参数验证、URL生成、图片处理等步骤,最终生成包含商品信息和二维码的图片。若过程中出现异常,会记录错误信息并返回失败结果。
3121

被折叠的 条评论
为什么被折叠?



