如何检测是否含有JPEG CMYK颜色配置文件? [英] How to detect if a jpeg contains cmyk color profile?
问题描述
我具有一个扩展的用户上传影像一些代码。它完美的作品在大多数情况下,但有时他们上传包含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屋!