![asp服务器端打印](https://img-blog.csdnimg.cn/img_convert/7499e5d7a22018257458aff6791a5e3d.png)
asp服务器端打印
Today I had a system that was sending me two base64'ed images in an XML response. The images were of the front and back image of a check. However, the requirement is to show a single composite check image at the browser with the front image stacked on top of the back image. Of course, it's got to be secure so no temp files, blah blah.
今天,我有一个系统,该系统通过XML响应向我发送了两个基于base64的图像。 这些图像是支票的正面和背面图像。 但是,要求是在浏览器上显示单个复合支票图像,并且正面图像堆叠在背面图像的顶部。 当然,它必须是安全的,所以没有临时文件,等等。
Here's the solution, done as an HttpHandler, so something like <img src="checkimage.ashx?whatever=4&something=6">
这是作为HttpHandler完成的解决方案,因此类似<img src =“ checkimage.ashx?whatever = 4&something = 6”>
public class SomeCheckImageHandler : IHttpHandler
公共类SomeCheckImageHandler:IHttpHandler
{
{
//some stuff snipped
//一些东西被剪掉
public SomeCheckImageHandler(){}
公共SomeCheckImageHandler(){}
public void ProcessRequest(HttpContext context)
公共无效ProcessRequest(HttpContext上下文)
{
{
context.Response.ContentType = "image/jpg";
context.Response.ContentType =“ image / jpg”;
//some stuff snipped
//一些东西被剪掉
GetCheckImageRequest req = new GetCheckImageRequest();
GetCheckImageRequest req =新的GetCheckImageRequest();
//some stuff snipped, get the params from the QueryString
//一些内容被删除,从QueryString中获取参数
GetCheckImageResponse res = banking.GetCheckImage(req);
GetCheckImageResponse res =银行业务.GetCheckImage(req);
//some stuff snipped
//一些东西被剪掉
if (res.ImageBack != null)
如果(res.ImageBack!= null)
{
{
//merge them into one image
//将它们合并为一张图像
using(MemoryStream m = new MemoryStream(res.BackImageBytes))
使用(MemoryStream m = new MemoryStream(res.BackImageBytes))
using(Image backImage = System.Drawing.Image.FromStream(m))
使用(Image backImage = System.Drawing.Image.FromStream(m))
using(MemoryStream m2 = new MemoryStream(res.BrontImageBytes))
使用(MemoryStream m2 = new MemoryStream(res.BrontImageBytes))
using(Image frontImage = System.Drawing.Image.FromStream(m2))
使用(Image frontImage = System.Drawing.Image.FromStream(m2))
using(Bitmap compositeImage = new Bitmap(frontImage.Width,frontImage.Height+backImage.Height))
使用(位图CompositeImage =新的位图(frontImage.Width,frontImage.Height + backImage.Height))
using(Graphics compositeGraphics = Graphics.FromImage(compositeImage))
使用(Graphics CompositeGraphics = Graphics.FromImage(compositeImage))
{
{
compositeGraphics.CompositingMode = CompositingMode.SourceCopy;
CompositeGraphics.CompositingMode = CompositingMode.SourceCopy;
compositeGraphics.DrawImageUnscaled(frontImage,0,0);
CompositeGraphics.DrawImageUnscaled(frontImage,0,0);
compositeGraphics.DrawImageUnscaled(backImage,0,frontImage.Height);
CompositeGraphics.DrawImageUnscaled(backImage,0,frontImage.Height);
compositeImage.Save(context.Response.OutputStream, ImageFormat.Jpeg);
CompositeImage.Save(context.Response.OutputStream,ImageFormat.Jpeg);
}
}
}
}
else //just show the front, we've got no back
否则//只显示正面,我们没有背面
{
{
using(MemoryStream m = new MemoryStream(frontImageBytes))
使用(MemoryStream m = new MemoryStream(frontImageBytes))
using(Image image = System.Drawing.Image.FromStream(m))
使用(Image image = System.Drawing.Image.FromStream(m))
{
{
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
image.Save(context.Response.OutputStream,ImageFormat.Jpeg);
}
}
}
}
}
}
}
}
I love it when .NET makes things this easy.
当.NET使事情变得如此轻松时,我喜欢它。
翻译自: https://www.hanselman.com/blog/compositing-two-images-into-one-from-the-aspnet-server-side
asp服务器端打印