`

java 实现cmyk转rgb图片格式

阅读更多
1

由于网页图片显示cmyk格式的图片不能显示,所以需要把它转化成RGK格式的图片。

以下方法可以实现。

通过加载Java ImageIO libraries 类库 去https://jai-imageio.dev.java.net下载这个类库。并进行安装

 

package com.ztl.book3un.util.web;
 
import java.awt.color.ColorSpace; 
import java.awt.image.BufferedImage; 
import java.awt.image.ColorConvertOp; 
import java.io.File; 
import java.io.IOException; 
 
import javax.imageio.ImageIO; 
 
import org.apache.commons.lang.StringUtils; 
 
public class CmykToRgb
{ 
 
   
/** 
     * Creates new RGB images from all the CMYK images passed 
     * in on the command line. 
     * The new filename generated is, for example "GIF_original_filename.gif". 
     * 
     */
 
   
public static void main(String[] args) 
   
{ 
        
  String filename = "d:\\test\\a.jpg";
           
boolean cmyk = isCMYK(filename); 
           
System.out.println(cmyk + ": " + filename); 
           
if (cmyk) 
           
{ 
               
try 
               
{ 
                   
String rgbFile = cmyk2rgb(filename); 
                   
System.out.println(isCMYK(rgbFile) + ": " + rgbFile); 
               
} 
               
catch (IOException e) 
               
{ 
                   
System.out.println(e.getMessage()); 
               
} 
           
} 
        

   
} 
 
   
/** 
     * If 'filename' is a CMYK file, then convert the image into RGB, 
     * store it into a JPEG file, and return the new filename. 
     * 
     * @param filename 
     */
 
   
private static String cmyk2rgb(String filename) throws IOException 
   
{ 
       
// Change this format into any ImageIO supported format. 
       
String format = "gif"; 
       
File imageFile = new File(filename); 
       
String rgbFilename = filename; 
       
BufferedImage image = ImageIO.read(imageFile); 
       
if (image != null) 
       
{ 
           
int colorSpaceType = image.getColorModel().getColorSpace().getType(); 
           
if (colorSpaceType == ColorSpace.TYPE_CMYK) 
           
{ 
               
BufferedImage rgbImage = 
                   
new BufferedImage( 
                        image
.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 
               
ColorConvertOp op = new ColorConvertOp(null); 
                op
.filter(image, rgbImage); 
 
                rgbFilename
= changeExtension(imageFile.getName(), format); 
                rgbFilename
= new File(imageFile.getParent(), format + "_" + rgbFilename).getPath(); 
               
ImageIO.write(rgbImage, format, new File(rgbFilename)); 
           
} 
       
} 
       
return rgbFilename; 
   
} 
 
   
/** 
     * Change the extension of 'filename' to 'newExtension'. 
     * 
     * @param filename 
     * @param newExtension 
     * @return filename with new extension 
     */
 
   
private static String changeExtension(String filename, String newExtension) 
   
{ 
       
String result = filename; 
       
if (filename != null && newExtension != null && newExtension.length() != 0); 
       
{ 
           
int dot = filename.lastIndexOf('.'); 
           
if (dot != -1) 
           
{ 
                result
= filename.substring(0, dot) + '.' + newExtension; 
           
} 
       
} 
       
return result; 
   
} 
 
   
private static boolean isCMYK(String filename) 
   
{ 
       
boolean result = false; 
       
BufferedImage img = null; 
       
try 
       
{ 
            img
= ImageIO.read(new File(filename)); 
       
} 
       
catch (IOException e) 
       
{ 
           
System.out.println(e.getMessage() + ": " + filename); 
       
} 
       
if (img != null) 
       
{ 
           
int colorSpaceType = img.getColorModel().getColorSpace().getType(); 
            result
= colorSpaceType == ColorSpace.TYPE_CMYK; 
       
} 
 
       
return result; 
   
} 
} 

这样就可以完成转化,但是有一个不好的地方就是生成生颜色失真比较严重。从美工那得知他们本来就是不一样的格式,失真比较正常。[此实例参考了国外的文章。]

 

更多精彩:http://www.lsoba.com

 

 

 

 

分享到:
评论
7 楼 hp321 2015-08-24  
这样真的可以解决吗?
为什么我使用你的代码:ImageIO.read(new File(filename))就直接抛异常了:“javax.imageio.IIOException: Unsupported Image Type”
所以img是null的
6 楼 gumenghua520 2014-07-15  
其实直接用一下代码就可以解决了:
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream( new File("e://1.jpg") ) );
BufferedImage sourceImg = decoder.decodeAsBufferedImage();
5 楼 gumenghua520 2014-07-15  
其实直接用一下代码就可以解决了:
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream( new File("e://1.jpg") ) );
BufferedImage sourceImg = decoder.decodeAsBufferedImage();
BufferedImage image = ImageIO.read(file);
4 楼 nhy520 2011-11-22  
我已经没有那个包了,不好意思。
3 楼 surpassdream 2011-11-17  


你好,这个包https://jai-imageio.dev.java.net/ 怎么下载, 那个官网上没有提供下载的链接啊, 可以把你下载的那个包发给我吗,谢谢 我的qq:285917033
2 楼 zhang13141006 2011-09-28  
img = ImageIO.read(new File(filename));
该代码无法读取cymk的图片。我在工作过程中也遇到了这个问题,看了楼主的文章,还是没有解决问题,请楼主指点。我的qq:358190425,。寻求帮助,万分感激。多谢。
1 楼 飞天奔月 2010-11-30  
javax.imageio.IIOException: Unsupported Image Type

相关推荐

    java 图片转换 cmyk转换rgb ie6,7,8无法显示cmyk格式的jpg图片

    还在为ie无法显示cmyk格式的jpg图片烦恼吗。本代码完全完整cmyk转rgb 严格经过测试

    Android 将一张CMYK模式的图片转换成RGB模式的图片

    本篇文章将详细探讨如何将一张CMYK(青、洋红、黄、黑)模式的图片转换成RGB(红、绿、蓝)模式的图片。我们将基于一个名为`android-lib-magick-master`的开源库进行讲解。 CMYK是一种颜色模型,主要用于印刷行业,...

    读取Tiff文件中CMYK色彩模式存储的图像数据,并转换为RGB色彩模式

    在Python中,保存转换后的图像为JPG或PNG格式可以这样实现: ```python # 保存为RGB模式的JPEG图像 img_rgb.save('CmykShow_1.0_rgb.jpg', 'JPEG') ``` 总的来说,处理CMYK色彩模式的Tiff文件并转换为RGB模式是...

    cmyk图片转为rgb图片

    在标题提到的"CMYK图片转为RGB图片"中,我们涉及到了两种主要的颜色模型:CMYK和RGB。这两种颜色模型在不同的应用场景中有其特定的用途。 CMYK(青色、洋红、黄色、黑色)是一种减色模型,常用于印刷业。它基于油墨...

    Java将PDF生成图片

    9. **多平台兼容性**:Java的跨平台特性使得PDF转图片的解决方案可以在Windows、Linux和Mac OS等多种操作系统上运行。 10. **实战示例**:下面是一个使用Apache PDFBox进行PDF转图片的简单代码示例: ```java ...

    java图片生成器

    在Java中实现图片生成器涉及到对Java 2D API、AWT和Swing库的深入理解。 Java 2D API是Java平台的标准部分,提供了丰富的功能来处理二维图形和图像。它支持基本的绘图操作,如绘制线、形状、文本和位图。开发者可以...

    用java把2个tiff或图片合并成一个tiff或图片

    6. **色彩空间转换**:如果源图像的色彩模式不同,比如一个RGB,另一个CMYK,可能需要先转换它们到相同的色彩空间,然后再进行合并。 7. **位深度和压缩**:TIFF支持8位、16位等不同的位深度。合并时要确保所有图像...

    基于Java的图片色彩空间转换工具.zip

    转换后的图片格式为TIFF,适用于印刷行业。 2. DPI调整 提供功能调整图片的DPI,以满足打印需求(通常要求DPI达到300)。 支持分别设置X轴和Y轴的DPI值。 3. 性能优化 经过性能测试,工具在不同大小的图片上...

    图像变换算法(java版本)

    图像通常在不同的颜色空间中表示,如RGB(红绿蓝)、CMYK(青、洋红、黄、黑,用于印刷)、HSV(色相、饱和度、明度)等。在Java中,可以使用`Color`类进行颜色空间的转换,这对于实现某些特定的图像效果至关重要,...

    基于java语言实现的简单的图片处理.zip

    在本项目"基于java语言实现的简单的图片处理.zip"中,开发者使用Java语言进行了一些基本的图像处理操作。虽然没有具体的标签提供额外的信息,但从文件名"java0323"我们可以推测,这可能是一个教学示例或者练习项目,...

    图片颜色转换-显示jpg图片

    例如,如果你有一张RGB模式的图片需要打印,可能需要转换为CMYK模式以保证颜色的准确呈现。转换过程中,可能会涉及到颜色空间的校正、颜色保真度的控制等技术。 接下来,我们讨论“显示jpg图片”。JPEG(Joint ...

    基于Java实现图像处理小工具【100011227】

    本项目为Java图像处理小工具。本Java工具包提供图片色彩空间的转换、图片dpi刷新的能力。我们经常用到的色彩空间主要有RGB、...目前Jar包只支持将图片由RGB模式转换为CMYK模式,转换后的图片为TIFF格式,后缀为'.tif'。

    java处理图片代码

    为了实现这些功能,Java开发者还需要理解基本的图像处理概念,如像素、颜色模型(RGB、CMYK等)以及图像的宽度和高度。同时,熟悉流的概念也很重要,因为图片数据通常是以字节流的形式处理和传输的。 总的来说,...

    java图片处理JAI 的jar

    2. **Color Space Conversion**: JAI 支持多种色彩空间之间的转换,例如从RGB到CMYK,或者从sRGB到Adobe RGB。这对于颜色管理尤其重要,特别是在印刷或专业图像处理领域。 3. **Filtering and Convolution**: JAI ...

    java高级成像 jai库

    - **颜色空间转换**:JAI支持多种颜色模型,如RGB、CMYK、灰度等,可以方便地在不同颜色空间之间转换。 - **性能优化**:JAI设计时考虑了性能,可以利用多线程和硬件加速来提升图像处理的速度。 - **元数据处理**...

    将图片转换为tiff格式

    - 某些图片格式(如PNG或GIF)可能包含透明度信息,TIFF文件可能无法完全保留这些信息,具体取决于转换库的实现。 综上所述,将图片转换为TIFF格式主要涉及到对Java编程的理解,以及对图像处理库的使用。通过引入...

    Java图片

    图像的色彩信息由色彩模型定义,如RGB、CMYK等。`BufferedImage`类允许你选择不同的色彩模型。缓冲区技术可以提高图像处理的效率。 8. **图像转换**: 有时我们需要将图像从一种格式转换为另一种,这可以通过`...

    java图片工具包源码

    2. **颜色模型**:Java支持多种颜色模型,如RGB、CMYK、灰度等。理解这些模型对于调整图像的颜色和亮度至关重要。 3. **图像处理API**:Java标准库中的`java.awt`和`java.awt.image`包提供了基本的图像处理API,...

    JAVA图像处理完整版

    3. **颜色模型与颜色空间**:Java支持多种颜色模型,如RGB、CMYK、灰度等。理解这些模型对于处理图像色彩至关重要。例如,RGB模型由红色、绿色和蓝色组成,可以表示大部分自然界的颜色。 4. **图像操作**:包括旋转...

    abc.rar_java 水印_watermark java_图像处理_图像识别java

    5. **Java_图像处理**:Java的图像处理涉及到很多技术,如色彩空间转换(RGB到HSV,CMYK等)、边缘检测(如Canny算法)、直方图均衡化、模糊处理(高斯模糊、平均模糊等)等。开发者可以利用这些技术增强图像质量,...

Global site tag (gtag.js) - Google Analytics