如何检测是否含有JPEG CMYK颜色配置文件? [英] How to detect if a jpeg contains cmyk color profile?

查看:157
本文介绍了如何检测是否含有JPEG CMYK颜色配置文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有一个扩展的用户上传影像一些代码。它完美的作品在大多数情况下,但有时他们上传包含CMYK信息的JPEG文件。



google搜索了一下后,好像用CMYK值JPEG文件是无效的,但由于它们工作在Windows中,用户认为这是我的应用程序的问题,所以我需要能够处理这些情况。问题:



我如何检测如果JPEG包含cmyk的信息(这将让我通知用户为什么不工作)



我怎样才能将其转换为JPEG正常?


解决方案

在ASP.NET可以判断一个JPG使用与System.Drawing中的帮助下,CMYK配置文件保存。 Imaging.ImageFlags枚举,



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



让我们假设你有其中一个用户上传文件基本的aspx页面,你需要告诉



1)它JPG?
2)是采用RGB?



您的aspx可能是一起



<$ p的线$ p> <表ID =form1的=服务器ENCTYPE =的multipart / form-data的>
< ASP:文件上传ID =myUpload=服务器/>
< ASP:按钮的ID =提交按钮=服务器文本=提交的OnClick =Click_submitButton/>
< BR />< BR />
< ASP:文字ID =反馈=服务器/>
< /表及GT;



,然后后面的代码(C#),你可以做,

 使用系统; 
使用System.Collections.Generic;
使用的System.Web;
使用System.Web.UI程序;使用System.Web.UI.WebControls
;

公共部分类_Default:System.Web.UI.Page
{
保护无效的Page_Load(对象发件人,EventArgs五)
{

}

保护无效Click_submitButton(对象发件人,EventArgs五)
{
如果(myUpload.HasFile&安培;&安培; isUploadAJpeg(myUpload.PostedFile))
{
System.Drawing.Bitmap uploadedImage =新System.Drawing.Bitmap(myUpload.PostedFile.InputStream);如果(isFileACMYKJpeg(uploadedImage))
{
feedback.Text =该文件是一个CYMK JPG
;
}
,否则
{
feedback.Text =这是一个RGB JPG
//这是一个RGB JPG - >用它做什么
}
}
,否则
{
feedback.Text =你没有上传JPG
}
}

保护布尔isUploadAJpeg(HttpPostedFile someFile)
{
如果(someFile.ContentType ==图像/ JPG|| someFile。 ContentType的==图像/ JPEG|| someFile.ContentType ==图像/ PJPEG)
{
返回真;
}
返回FALSE;
}

保护布尔isFileACMYKJpeg(System.Drawing.Image对象someImage)
{
System.Drawing.Imaging.ImageFlags flagValues​​ =(System.Drawing.Imaging.ImageFlags )Enum.Parse(typeof运算(System.Drawing.Imaging.ImageFlags),someImage.Flags.ToString());
如果(。flagValues​​.ToString()ToLower将()的IndexOf(YCCK)== -1)
{
返回false;
}
返回真;
}
}



希望帮助!


I have some code that scales the images users upload. It works perfectly in most situations, but sometimes they upload jpegs that contain cmyk information.

After googling a bit, it seems like jpegs with cmyk values isn't valid, but since they work in windows, the users assume it's a problem with my application, so I need to be able to handle those situations. The questions:

How do I detect if the jpeg contains cmyk information?(it would allow me to inform the user why it doesn't work).

How can I convert it to a normal jpeg?

解决方案

In ASP.NET you can determine if a JPG is saved using the CMYK profile with the help of the System.Drawing.Imaging.ImageFlags enumeration,

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

Let's say you have a basic aspx page where a user uploads a file and you need to tell,

1) is it a jpg? 2) is it using RGB?

Your aspx might be along the lines of,

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

and then for your code behind (C#) you can do,

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;
    }
}

Hope that helps!

这篇关于如何检测是否含有JPEG CMYK颜色配置文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆