Как обнаружить, если jpeg содержит cmyk цветовой профиль?

Avinash, вам нужно ограничить регулярное выражение, чтобы захватить только первые 30 символов. Regex для этого может быть следующим.

Регулярное выражение:
[\w\s]{2,30} здесь \ w соответствует [A-Za-z0-9_].

Пример: https://regex101.com/r/mN825k/1

Если вы не хотите включать _, вы вместо этого можете использовать это регулярное выражение.
Regex: [A-z0-9\s]{2,30}

Пример: https://regex101.com/r/mN825k/2

Оба случая также включают пробелы , Если вы не хотите, чтобы пробел был частью вашей строки и разделяйте строку после пробела, удалите \s из регулярного выражения.

8
задан 15 January 2009 в 14:02
поделиться

2 ответа

Jpeg является стандартом, которые поддерживают любое количество закодированных плоскостей (они сжаты друг независимо от друга) в битовом потоке, таким образом, jpeg с профилем cmyk совершенно допустим. Большинство jpeg файлов кодируется с помощью jfif контейнера (http://en.wikipedia.org/wiki/JFIF), который первоначально только поддерживал полутоновые изображения, YCbCr или sRGB, но это расширяемо и Adobe, имеют пользовательский тег для поддержки профилей cmyk.

Смотрите на эту ссылку для обходного решения http://www.jroller.com/greenhorn/entry/adobe_photoshop_and_jpeg_cmyk, это находится в Java, но можно портировать его легко на c#.

3
ответ дан 5 December 2019 в 22:21
поделиться

В ASP.NET вы можете определить, сохраняется ли JPG, используя профиль CMYK, с помощью перечисления System.Drawing.Imaging.ImageFlags,

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

Надеюсь, что это поможет!

3
ответ дан 5 December 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: