博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
上传图片时,CMKY转RGB
阅读量:4599 次
发布时间:2019-06-09

本文共 2510 字,大约阅读时间需要 8 分钟。

在做项目时发现图片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的方式来解决此问题:。

 

转载于:https://www.cnblogs.com/colder/archive/2012/11/16/2773115.html

你可能感兴趣的文章
windows下python一些库编译问题
查看>>
centos 7设置limit,不生效问题
查看>>
外部引用CSS中 link与@import的区别
查看>>
各种语言学习
查看>>
将博客搬至CSDN
查看>>
计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)
查看>>
10.2计数与概率基础
查看>>
ssh无密码登陆
查看>>
使用django book2.0 时候,输入python manage.py sqlall books 报错解决办法
查看>>
Linux中docker的使用
查看>>
编译器选项
查看>>
VirtualBox虚拟机磁盘瘦身
查看>>
CSS的三种样式
查看>>
关于hadoop集群的简单性能测试——mapreduce性能,hive性能,并行计算分析(原创)...
查看>>
Asp.Net 4中使用路由时使用SiteMap
查看>>
linux之软连接 硬链接
查看>>
javascript中数组与字符串之间的转换以及字符串的替换
查看>>
使用pip安装离线包
查看>>
ORACLE 统计查看每一个表的行数
查看>>
【bzoj4281】[ONTAK2015]Związek Harcerstwa Bajtockiego 树上倍增+LCA
查看>>