/// <summary>
/// 合成图
/// </summary>
private string ComposeCarBrandBadImage(AnonAttachmentFilter filter)
{
filter.pageIndex = 1;
filter.pageSize = 100;
IList<AnonAttachment> attachmentList = B_Attachment.Instance.GetList(filter);
int height = 250 * ((int)((attachmentList.Count + 1) / 2));
height = height <= 0 ? 320 : height;
Bitmap _newBitmap = new Bitmap(645, height);
//_newBitmap.SetPixel(250, 300,Color.White);
Graphics _graphics = Graphics.FromImage(_newBitmap);
_graphics.Clear(Color.White);
int x = 0, y = 0;
string path = string.Empty,copyPath=string.Empty;
List<string> pathlist = new List<string>();
for (int i = 0; i < attachmentList.Count; i++)
{
x = (i + 1) % 2 == 0 ? 325 : 20;
y = 245 * ((int)(i / 2)) + 5;
path = System.Web.HttpContext.Current.Server.MapPath(".." + attachmentList[i].Path);
if (!File.Exists(path)) continue;//如果文件不存在。
// 用于生成图片的拷贝,处理并发操作时导致的无法进行读写操作的问题
copyPath = path.Substring(0, path.LastIndexOf("\\") + 1) + Guid.NewGuid().ToString() + path.Substring(path.LastIndexOf("\\")+1);
File.Copy(path, copyPath);
pathlist.Add(copyPath);
Image img = System.Drawing.Image.FromFile(copyPath);
_graphics.DrawImage(img, x, y, 300, 240);
img.Dispose();
}
if (attachmentList.Count == 0)
{
_newBitmap = new Bitmap(600, 320);
//_newBitmap.SetPixel(250, 300,Color.White);
_graphics = Graphics.FromImage(_newBitmap);
_graphics.Clear(Color.White);
_graphics.DrawImage(System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("../_theme/images/CarBad.gif")), 0, 0, 600, 320);
}
//_graphics.DrawString("文字", new Font(FontFamily.GenericSerif, 10), Brushes.Yellow, 50, 50);
_newBitmap.Save(System.Web.HttpContext.Current.Server.MapPath("../_upload/carBrandBadImg/") + filter.FromId + "/ComposeCarBrandBadImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
_graphics.Dispose();
foreach (string ph in pathlist)
{
File.Delete(ph);
}
return "../_upload/carBrandBadImg/" + filter.FromId + "/ComposeCarBrandBadImage.jpg";
}
C#简单的图片合成及防止并发的办法
时间: 2024-10-11 05:14:35