zoukankan      html  css  js  c++  java
  • 上传图片时,CMKY转RGB

    在做项目时发现图片CMYK模式无法显示,

    下面使用将Image重新绘制为Format24bppRgb的方式来解决此问题: 

    using System.Drawing; 

    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;

    protected void Button1_Click(object sender, EventArgs e)
            {
                if (FileUpload1.HasFile)
                {
                    SavePostedImage(FileUpload1.PostedFile, FileUpload1.FileName, 1000,1000);
                }
            }

            public void SavePostedImage(HttpPostedFile postedFile, string destFileName, int maxHeight, int maxWidth)
            {
                System.Drawing.Imaging.ImageFormat imgFormat;
                if (destFileName.ToLower().EndsWith("jpg"))
                {
                    imgFormat = ImageFormat.Jpeg;
                }
                else //这里可以加更多选项,比如png,gif,tif....
                {
                    imgFormat = ImageFormat.Gif;
                }

                Bitmap bmp = new Bitmap(postedFile.InputStream);

                if (IsCMYK(bmp))
                {
                    bmp = ConvertCMYK(bmp);
                }

                if ((bmp.HorizontalResolution > 72) || (bmp.VerticalResolution > 72))
                {
                    bmp.SetResolution(7272);
                }

                Bitmap saveBmp;
                if ((bmp.Height > maxHeight) || (bmp.Width > maxWidth))
                {
                    Double heightRatio = Convert.ToDouble(maxHeight) / Convert.ToDouble(bmp.Height);
                    Double widthRatio = Convert.ToDouble(maxWidth) / Convert.ToDouble(bmp.Width);
                    Double scaleRatio;

                    if (heightRatio > widthRatio)
                    {
                        scaleRatio = widthRatio;
                    }
                    else
                    {
                        scaleRatio = heightRatio;
                    }

                    int height = Convert.ToInt32(bmp.Height * scaleRatio);
                    int width = Convert.ToInt32(bmp.Width * scaleRatio);

                    saveBmp = new Bitmap(bmp, width, height);
                }
                else
                {
                    saveBmp = new Bitmap(bmp);
                }

                bmp.Dispose();
                saveBmp.Save(Server.MapPath("~/") + destFileName, imgFormat);
                saveBmp.Dispose();
                postedFile.InputStream.Close();
            }

            public string GetImageFlags(System.Drawing.Image img)
            {
                ImageFlags FlagVals = (ImageFlags)Enum.Parse(typeof(ImageFlags), img.Flags.ToString());
                return FlagVals.ToString();
            }


            public bool IsCMYK(System.Drawing.Image img)
            {
                bool isCmyk;

                if ((GetImageFlags(img).IndexOf("Ycck") > -1) || (GetImageFlags(img).IndexOf("Cmyk") > -1))
                { isCmyk = true; }
                else
                { isCmyk = false; }

                return isCmyk;
            }

            public Bitmap ConvertCMYK(Bitmap bmp)
            {
                Bitmap tmpBmp = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format24bppRgb);

                Graphics g = Graphics.FromImage(tmpBmp);
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                Rectangle rect = new Rectangle(00, bmp.Width, bmp.Height);
                // 将CMYK图片重绘一遍,此时GDI+自动将CMYK格式转换为RGB了
                g.DrawImage(bmp, rect);

                Bitmap returnBmp = new Bitmap(tmpBmp);

                g.Dispose();
                tmpBmp.Dispose();
                bmp.Dispose();

                return returnBmp;
            } 

        }下面使用将Image重新绘制为Format24bppRgb的方式来解决此问题:。


  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/colder/p/2773115.html
Copyright © 2011-2022 走看看