繁体   English   中英

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

[英]Save canvas to image using C# and jQuery

我正在尝试正确保存用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选择中突出显示了该图像。

我需要在现有代码中进行哪些修改才能使图像裁剪正常工作?

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

根据jcrop在线文档 ,jcrop不会进行非矩形裁剪-

裁剪不规则选择

如果您实际上想裁剪圆形或椭圆形,那么您就该靠自己了。 Jcrop将为这些作物提供直角坐标,并且可以进行进一步处理以从图像中提取圆形或椭圆形。

如果要在客户端上进行图像处理,则需要使用支持alpha通道(可能为32位:RGB和Alpha为8位)的图像格式。 您需要将遮罩应用于canvas元素中的alpha通道。 我认为alpha支持是HTML5中的最新内容,因此浏览器支持可能不完整。

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

另外,如果您的服务器端代码“知道”所选裁剪蒙版的形状,则可以将完整的(矩形)图像发送回服务器,并让您的服务器端代码使用正确的蒙版形状,例如使用GD PHP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM