上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片
来源:互联网 发布:最近网络融资骗局 编辑:程序博客网 时间:2024/04/30 15:55
我们知道,如果网站上传图片时,如果用户上传的是CMYK图片,那么在网站上将是无法显示的,通常的现象是出现一个红叉。
下面使用将Image重新绘制为Format24bppRgb的方式来解决此问题:
public static void SavePostedImage(HttpPostedFile postedFile, string destFileName, int maxHeight, int maxWidth)
{
System.Drawing.Imaging.ImageFormat imgFormat;
if (destFileName.ToLower().EndWith("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(72, 72);
}
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(destFileName, imgFormat);
saveBmp.Dispose();
postedFile.InputStream.Close();
}
public static string GetImageFlags(System.Drawing.Image img)
{
ImageFlags FlagVals = (ImageFlags)Enum.Parse(typeof(ImageFlags), img.Flags.ToString());
return FlagVals.ToString();
}
public static 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 static 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(0, 0, 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;
}
更多讨论:
(1)如何将RGB图片转换为CMYK图片?
(2)如何将RGB图片转换为索引图片?
(3)如何将RGB图片转换为灰度/黑白线条图片?
(4)上述转换如果是在WPF中,又如何进行呢?
留给读者去思考吧.
- 上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片
- 上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片
- cmyk图片转为rgb图片
- 将rgb数据流转为图片
- Java CMYK图片转RGB图片
- 将CMYK彩色空间的图片转换为RGB彩色空间的图片
- 使用Python将文本转为图片
- java下cmyk图片读取和转换rgb
- JAVA将上传的PPT/PPTX转为图片
- 使用GDI绘画图片
- 使用GDI+ 缩放图片
- 将图片转为字符数据
- ffmpeg将图片转为视频
- Java将图片转为base64
- html2canvas 将代码转为图片
- Java实现把cmyk格式图片转换为RGB格式图片
- 将非RGB图片转换为RGB图片
- 上传数据时将其转为base64格式,支持图片视频
- 批处理编程- -介绍(从别人哪里弄的,自己学习了一下)
- 二叉树的C++源码
- windows XP 的命令大全(转载)
- 牛仔裤不会一直等你
- 《pro Spring》学习笔记之Quartz的cronTrigger使用
- 上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片
- jmf摄像头applet
- 什么是交叉编译-嵌入式基础系列(网络查找)
- windows变量前缀总结(原创)
- How the 80/20 rule can help you be more effective.
- arm-linux-gcc和arm-elf-gcc的区别-嵌入式基础系列(网络查找)
- Facing Business Challenges at Holiday Inn Worldwide
- SNDCP学习笔记一(概述)
- FACING BUSINESS CHALLENGES AT AJ WRAPS