C#简单的图片合成及防止并发的办法


        /// <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

C#简单的图片合成及防止并发的办法的相关文章

iOS 图片水印、图片合成文字或图片实现

这个需求可能有时候会碰到,比如自己的照片加版权,打水印等 网上的方法,有不少感觉不全对,或者需求不是特全,这里我总结了3种场景下的需求: 1.本地图片合成文字 2.本地图片合成图片 3.网络图片先下载再合成图片 效果图: 这里的合成的size大小,我都是随便写的,没特意计算,大家可以按实际需求自定义. 代码部分: /** 图片合成文字 @param img <#img description#> @param logoText <#logoText description#> @r

ps图片合成教程

ps合成功能同样也是很多ps爱好者经常用到的,ps合成可以把二张不同的图片,甚至是多张都合成一张图像,只保留每张图片里面我们想要的,比如给人物换个风景,给照片加个人,通常用于想把某个东西融入到一张照片里,这就需要用到ps合成,真正把ps合成功能做好的,还需要搭配ps抠图技巧,这个之前笔者有说过详细的教程,新手可去了解,今天我们就来说说ps怎么把两张图片合成一张,接下来请看ps图片合成教程. PS两张图片合成一张换背景效果 如上图,上面可是两张照片换背景合成的,怎么样,很漂亮吧.那么给图片换背景如

C# 文字图片生成与背景图片合成

最近有个需求是将生成的邀请码与背景图片合成成为新的图片,查找了一些资料后又整理了一遍,查到了一个群主的帖子,虽然代码略微有点问题,地址是:https://www.cnblogs.com/stulzq/p/6137715.html,下面上修改后的代码,有两个资源图片,是自己做的,第一个是背景图片(500*600),第二个是前景图片(200*200). public ActionResult Index() { //生成邀请码图片 字符间距 带空格比较简单 //Image img = CreateI

WPF 下两种图片合成或加水印的方式(转载)

来源:http://www.cnblogs.com/lxblog/ 最近项目中应用多次应用了图片合成,为了今后方便特此记下. 在WPF下有两种图片合成的方式,一种还是用原来C#提供的GDI+方式,命名空间是System.Drawing 和 System.Drawing.Imaging,另一种是WPF中新添加的API,命名空间是 System.Windows.Media 和 System.Windows.Media.Imaging . 我们来做一个简单的例子,分别用上面的两种方式实现,功能是在一个

JS实现简单的图片轮转

+(UIImage*)createImageFromView:(UIView*)view { //obtain scale CGFloat scale = [UIScreen mainScreen].scale; 开始绘图,下面方法,第一个参数表示区域大小.第二个参数表示是否是非透明的.如果需要显示半透明效果,需要传NO,否则传YES.第三个参数就是屏幕密度了 UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.wi

简单的图片裁剪服务器

自己写的一个简单的图片服务器,可以读取FastDFS上的图片,根据参数进行图片裁剪输出到前台 改项目可以上传图片到FastDFS,读取FastDFS上存储的图片,前面可以增加Varnish图片缓存服务器缓解图片裁剪压力 使用一个简单的Servlet实现 package com.imgcut.servlet; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException;

Qt项目实战2:简单的图片查看器(1)

在博文http://www.cnblogs.com/hancq/p/5817108.html中介绍了使用空的Qt项目创建带有菜单栏.工具栏的界面. 这里,使用一个简单的图片查看器项目,来熟悉一下Qt的图片显示和基本操作. 该项目分为两部分: (1)实现图片的打开.关闭.居中显示.上一张/下一张切换 (2)实现图片的放大.缩小.左旋.右旋.另存为等操作 需要用的Qt类: QFileDialog QImage QPixmap QFileInfo 使用空的Qt项目创建带有菜单栏和工具栏的界面的操作参考

【开源java游戏框架libgdx专题】-12-开发工具-图片合成

TexturePackerGui工具: 1.工具使用: 首先看到texturepacker的界面 界面介绍: New pack:创建项目按钮,单击后输入文件名称,创建文件. Input directory:待整合图片资源目录,建议使用test me!目录中的input文件夹 Output directory:整合后图片及配置文件保存目录 Pack all:打包所有创建的文件 File name:配置文件名称 Default image format:默认图片编码格式 Default file f

关于使用TexturePackerGUI将图片合成和用Python Imaging Library将图片分解

写这片博客前,我在学习cocos2d-x,正在做一个微信打飞机的项目,为了将飞机图片资源合成为一张,使用到了TexturePackerGUI软件,在这介绍使用方法,后面是将这张合成图片分解成原来图片的方法. 合成 软件下载地址 破解完成之后就开始使用,对里面控件不熟悉的请参考这篇文章,虽然看起来复杂,但是只要把你所有需要合成的资源全部移到右边的框内就行了,如下图(蓝色的地方): 好了,把图片全部拖进去之后,就可以开始导出了,选择菜单栏中的Publish,在此之前,请在左边的DataFile中设置