使用 C# 和 jQuery 将画布保存到图像

Posted

技术标签:

【中文标题】使用 C# 和 jQuery 将画布保存到图像【英文标题】:Save canvas to image using C# and jQuery 【发布时间】:2016-02-16 16:55:44 【问题描述】:

我正在尝试将使用 jcrop 突出显示的部分图像正确保存到圆形图像中。

我有canvas元素,可以预览所选区域以及图像的外观,请查看下面的屏幕截图:

我还有一个隐藏字段,用于保存画布中显示的值(例如:“data:image/png;base64”)。

我可以使用以下代码从隐藏字段值中保存图像:

if (hfImageData.Value != string.Empty)
            
                string value = hfImageData.Value;
                if (value.Contains("jpeg"))
                
                    value = value.Replace("data:image/jpeg;base64,", "");
                
                else if(value.Contains("png"))
                
                    value = value.Replace("data:image/png;base64,", "");
                
                string path = Server.MapPath("/cropimages/");
                string fileNameWitPath = path + DateTime.Now.ToString().Replace("/", "-").Replace(" ", "- ").Replace(":", "") + ".png";

                using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
                
                    using (BinaryWriter bw = new BinaryWriter(fs))
                    
                        byte[] data = Convert.FromBase64String(value);
                        bw.Write(data);
                        bw.Close();
                    
                
            

这是该代码的最终结果:

我真正想要保存的是圆形格式的图像,因为它在使用 jQuery/C# 的 jcrop 选择中突出显示。

我需要在现有代码中修改哪些内容才能使图像裁剪按预期工作?

【问题讨论】:

【参考方案1】:

通常,计算机图像始终存储为矩形数据块。 “非矩形”图像是具有与其关联的非矩形蒙版或不透明“alpha”层的矩形图像。

根据jcrop online docs,jcrop 不进行非矩形裁剪-

裁剪不规则的选择

如果你真的想裁剪一个圆形或一个椭圆,你就在你的 自己的。 Jcrop 将为这些作物提供直角坐标, 并且可以进行进一步处理以提取圆或椭圆 来自图像。

如果您的目标是在客户端上进行图像处理,那么您需要使用支持 Alpha 通道(可能是 32 位:RGB 和 Alpha 为 8 位)的图像格式。您需要将遮罩应用到画布元素中的 Alpha 通道。我认为 alpha 支持是 html5 中相当新的东西,所以浏览器支持可能不完整。

然后,您需要以支持 alpha 的文件格式将其传达回主机。 JPEG 没有,PNG(每像素 32 位格式)可以。

或者,如果您的服务器端代码“知道”选择裁剪蒙版的形状,您可以将完整(矩形)图像发送回服务器,并让您的服务器端代码使用正确的蒙版形状就像 php 中的 GD。

【讨论】:

@lncans 你有一些 c# 例子我怎么能做到这一点?谢谢

以上是关于使用 C# 和 jQuery 将画布保存到图像的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 Javascript 将画布图像保存到服务器

HTML5 画布 - 将保存的图像分享到社交媒体

将 HTML5 画布图像保存到数据库

如何在不使用画布的情况下将整个 div 数据转换为图像并将其保存到目录中?

将图像加载到画布上并放大/缩小并移动它以适应并保存画布上的内容

如何使用 jquery 将动态创建的 img 元素加载到 HTML5 画布中