我有一些代码可以缩放用户上传的图像。它在大多数情况下都能正常工作,但有时他们会上载包含cmyk信息的jpeg。

稍作搜索后,似乎带有cmyk值的jpeg无效,但是由于它们在Windows中工作,因此用户认为这是我的应用程序存在的问题,因此我需要能够处理这些情况。问题:

我如何检测jpeg是否包含cmyk信息?(它可以让我通知用户为什么它不起作用)。

如何将其转换为普通的jpeg?

最佳答案

在ASP.NET中,您可以借助System.Drawing.Imaging.ImageFlags枚举来确定是否使用CMYK配置文件保存了JPG,

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.imageflags(VS.80).aspx

假设您有一个基本的aspx页面,用户可以在其中上传文件,并且需要告诉您,

1)是jpg吗?
2)使用RGB吗?

您的aspx可能与

<form id="form1" runat="server" enctype="multipart/form-data">
<asp:FileUpload ID="myUpload" runat="server" />
<asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="Click_submitButton" />
<br /><br />
<asp:Literal ID="feedback" runat="server" />
</form>

然后您可以针对(C#)后面的代码进行操作,
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Click_submitButton(object sender, EventArgs e)
    {
        if (myUpload.HasFile && isUploadAJpeg(myUpload.PostedFile))
        {
            System.Drawing.Bitmap uploadedImage = new System.Drawing.Bitmap(myUpload.PostedFile.InputStream);
            if (isFileACMYKJpeg(uploadedImage))
            {
                feedback.Text = "The file is a CYMK jpg";
            }
            else
            {
                feedback.Text = "This is a RGB jpg";
                //it is a rgb jpg --> do something with it
            }
        }
        else
        {
            feedback.Text = "You did not upload a jpg";
        }
    }

    protected bool isUploadAJpeg(HttpPostedFile someFile)
    {
        if (someFile.ContentType == "image/jpg" || someFile.ContentType == "image/jpeg" || someFile.ContentType == "image/pjpeg")
        {
            return true;
        }
        return false;
    }

    protected bool isFileACMYKJpeg(System.Drawing.Image someImage)
    {
        System.Drawing.Imaging.ImageFlags flagValues = (System.Drawing.Imaging.ImageFlags)Enum.Parse(typeof(System.Drawing.Imaging.ImageFlags), someImage.Flags.ToString());
        if (flagValues.ToString().ToLower().IndexOf("ycck") == -1)
        {
            return false;
        }
        return true;
    }
}

希望对您有所帮助!

关于c# - 如何检测jpeg是否包含cmyk颜色配置文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/446834/

10-12 03:55